with run node how form deploy app node.js express development-environment production-environment

run - Node.js, express y usando desarrollo versus producción en app.configure



run node app in production (5)

¿Cuál es el método más fácil para dejar saber en qué entorno estoy? Por ejemplo, quiero hacer lo siguiente para hacer una conexión a redis dependiendo de en qué env estoy. ¿Se puede hacer esto desde la línea de comando?

app.configure(''development'', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); var r = require("redis").createClient(6379,''127.0.0.1''); }); app.configure(''production'', function(){ app.use(express.errorHandler()); r = redis.createClient(6379,''46.137.195.230'', { detect_buffers: true }); });


Hice algo aún más completo al ordenar las fuentes de dichos parámetros:

var env = process.argv[2] || process.env.NODE_ENV || ''development'' var mongourl = process.argv[3] || process.env.NODE_DB || ''mongodb://localhost/default'' var port = process.env.PORT || 9001

De esta forma puede usar argumentos de línea de comando, configuraciones env y valores predeterminados.


Para ampliar la idea de usar un archivo config.json:

// config.json { "development": { "redisPort": 6379, "redisHost": "127.0.0.1", "errorHandlerOptions": {"dumpExceptions": true, "showStack": true} }, "production": { "redisPort": 6379, "redisHost": "46.137.195.230", "errorHandlerOptions": {"dumpExceptions": false, "showStack": false} } }

Cargue el archivo de configuración y cambie según env.

// app.js var config = require(''./config.json'')[app.get(''env'')]; app.use(express.errorHandler(config.errorHandlerOptions)); var r = require("redis").createClient(config.redisPort,config.redisHost);

Asegúrese de que NODE_ENV esté configurado en cada servidor (vea otras respuestas, una vía: NODE_ENV=production node app.js ), y de esta manera la variable de configuración tiene la configuración adecuada para el servidor en el que se ejecuta.


Simplemente configure la variable de entorno NODE_ENV para production o development , como se ve en express ''docs: http://expressjs.com/guide.html#configuration

Simplemente dejo NODE_ENV=development en ~/.profile (.bashrc o bash_profile en linux) de la máquina de NODE_ENV=development , y hago lo mismo para los de production .


Su enfoque está bien, pero puede hacer algo más genérico, como almacenar los datos de configuración para Redis en un archivo o pasar los argumentos de host y puerto como:

node app.js REDIS_HOST REDIS_PORT

Luego, en su aplicación, puede tomarlos usando process.argv:

app.configure(''development'', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); var r = require("redis").createClient(process.argv[2], process.argv[3]); }); app.configure(''production'', function(){ app.use(express.errorHandler()); var r = require("redis").createClient(process.argv[2], process.argv[3], { detect_buffers: true }); });

Actualizar:

Express sabrá en qué entorno se encuentra al observar la variable NODE_ENV (process.env.NODE_ENV): https://github.com/visionmedia/express/blob/master/lib/application.js#L55

Puede establecer esa variable al iniciar la aplicación de la siguiente manera: NODE_ENV=production node app.js (recomendado), estableciendo process.env.NODE_ENV manualmente en su aplicación de nodo antes del código Express o poniendo esa env var en ~ / .profile como Ricardo dijo.


Use el módulo de configuración que permite crear múltiples archivos de configuración https://www.npmjs.com/package/config

Por ejemplo, default.json, production.json

Y enciende tu servidor

conjunto de exportación NODE_ENV = producción && npm start