Quelle est la méthode la plus simple pour faire savoir à quel environnement je me trouve? Par exemple. Je veux faire ce qui suit pour établir une connexion à redis en fonction de mon environnement. Cela peut-il être fait à partir de la ligne de commande?
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 });
});
Votre approche est correcte, mais vous pouvez créer quelque chose de plus générique, comme stocker les données de configuration pour Redis dans un fichier ou passer les arguments de type hôte et port:
node app.js REDIS_Host REDIS_PORT
Ensuite, dans votre application, vous pouvez les récupérer en utilisant 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 });
});
Mise à jour:
Express saura dans quel environnement vous vous trouvez en regardant la variable NODE_ENV (process.env.NODE_ENV): https://github.com/visionmedia/express/blob/master/lib/application.js# L55
Vous pouvez définir cette variable lors du démarrage de l'application comme suit: NODE_ENV=production node app.js
(recommandé), en définissant manuellement process.env.NODE_ENV dans votre application de nœud avant le code Express ou en mettant cette variable env dans ~/.profile comme Ricardo l'a dit.
Pour développer l'idée d'utiliser un fichier 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}
}
}
Chargez le fichier de configuration et basculez en fonction de 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);
Assurez-vous que NODE_ENV est défini sur chaque serveur (voir les autres réponses, dans un sens: NODE_ENV=production node app.js
), et ainsi la variable config a les paramètres appropriés au serveur sur lequel elle s'exécute.
Réglez simplement le NODE_ENV
variable d'environnement à production
ou development
, comme vu dans les documents express: http://expressjs.com/guide.html#configuration
Je laisse juste NODE_ENV=development
dans la machine de développement ~/.profile
(.bashrc ou bash_profile sur linux), et faites de même pour les production
ceux.
J'ai fait quelque chose d'encore plus complet en ordonnant les sources de ces paramètres:
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 cette façon, vous pouvez utiliser les arguments de ligne de commande, les paramètres env et les valeurs par défaut.
Utilisez le module de configuration qui permet de créer plusieurs fichiers de configuration https://www.npmjs.com/package/config
Par exemple default.json, production.json
Et démarrez votre serveur avec
jeu d'export NODE_ENV = production && npm start