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 });
});
Author: Grace Shao, 2012-05-23

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.
 29
Author: alessioalex,
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.

 25
Author: Sean,
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.

 19
Author: Ricardo Tomasi,
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.

 9
Author: Arnaud Rinquin,
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

 0
Author: Ashutosh Jha,
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