Węzeł.js, express i korzystanie z rozwoju a produkcja w aplikacji.konfiguracja
Jaka jest najprostsza metoda, aby poinformować express, w jakim środowisku się znajduję? Np. chcę wykonać poniższe czynności, aby nawiązać połączenie z redis w zależności od tego, w jakim env jestem. Czy można to zrobić z linii poleceń?
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 });
});
5 answers
Twoje podejście jest ok, ale możesz zrobić coś bardziej ogólnego, jak przechowywanie danych konfiguracyjnych dla Redis w pliku lub przekazywanie argumentów host i port:
node app.js REDIS_HOST REDIS_PORT
Następnie w aplikacji można pobrać je za pomocą procesu.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 });
});
Aktualizacja:
Express będzie wiedział w jakim środowisku jesteś patrząc na zmienną NODE_ENV (process.env.NODE_ENV): https://github.com/visionmedia/express/blob/master/lib/application.js#L55
Możesz ustaw tę zmienną podczas uruchamiania aplikacji w następujący sposób:NODE_ENV=production node app.js
(zalecane), ustawianie procesu.env.Node_env ręcznie w aplikacji węzła przed kodem ekspresowym lub umieszczeniem tego ENV var w~/.profil jak powiedział Ricardo.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 08:47:11
Aby rozwinąć pomysł użycia config.plik 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}
}
}
Załaduj plik konfiguracyjny i przełącz na podstawie 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);
Upewnij się, że NODE_ENV jest ustawione na każdym serwerze (zobacz inne odpowiedzi, one way: NODE_ENV=production node app.js
), i w ten sposób zmienna konfiguracyjna ma ustawienia odpowiednie do serwera, na którym działa.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-17 17:51:36
Ustaw zmienną środowiskową NODE_ENV
na production
lub development
, Jak pokazano w express ' docs: http://expressjs.com/guide.html#configuration
Po prostu zostawiam NODE_ENV=development
w maszynie dev ~/.profile
(.bashrc lub bash_profile na Linuksie) i zrób to samo dla production
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 15:23:56
Zrobiłem coś jeszcze bardziej wyczerpującego, zamawiając źródła takich parametrów:
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
W ten sposób możesz używać args linii poleceń, ustawień env i wartości domyślnych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-23 07:38:39
Użyj modułu config, który pozwala na tworzenie wielu plików konfiguracyjnych https://www.npmjs.com/package/config
Np default.JSON, produkcja.json
I uruchom serwer z
Export set NODE_ENV=production & & npm start
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-10 16:58:43