Node.js, выражать и использовать разработку и производство в app.configure
Какой самый простой способ дать понять, в какой среде я нахожусь? Например. Я хочу сделать ниже, чтобы сделать соединение с redis в зависимости от того, в каком я env. Я могу это сделать из командной строки?
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 });
});
Ответы
Ответ 1
Ваш подход в порядке, но вы можете сделать что-то более общее, например, хранить данные конфигурации для Redis в файле или передавать хост и порт как аргументы:
node app.js REDIS_HOST REDIS_PORT
Затем в вашем приложении вы можете захватить их с помощью 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 });
});
Update:
Экспресс будет знать, в какой среде вы находитесь, просматривая переменную NODE_ENV (process.env.NODE_ENV): https://github.com/visionmedia/express/blob/master/lib/application.js#L55
Вы можете установить эту переменную при запуске приложения следующим образом: NODE_ENV=production node app.js
(рекомендуется), установив файл process.env.NODE_ENV вручную в ваше приложение node перед кодом Express или поместив этот env var в ~/.profile, например Сказал Рикардо.
Ответ 2
Чтобы расширить идею использования файла 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}
}
}
Загрузите файл конфигурации и переключитесь на основе 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);
Убедитесь, что NODE_ENV установлен на каждом сервере (см. другие ответы, один из способов: NODE_ENV=production node app.js
), и таким образом переменная конфигурации имеет настройки, соответствующие серверу, на котором он выполняется.
Ответ 3
Просто установите переменную среды NODE_ENV
в production
или development
, как показано в экспресс-документах: http://expressjs.com/guide.html#configuration
Я просто оставлю NODE_ENV=development
в dev-машине ~/.profile
(.bashrc или bash_profile в linux) и сделаю то же самое для production
.
Ответ 4
Я сделал что-то еще более всеобъемлющее, заказав источники таких параметров:
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
Таким образом вы можете использовать параметры командной строки, параметры env и значения по умолчанию.
Ответ 5
Использовать конфигурационный модуль, который позволяет создавать несколько файлов конфигурации
https://www.npmjs.com/package/config
Например, default.json, production.json
И запустите свой сервер с помощью
набор экспорта NODE_ENV = production && & npm start