web-dev-qa-db-ja.com

Node.js、エクスプレス、およびapp.configureでの開発と本番の使用

どんな環境にいるのかを表現する最も簡単な方法は何ですか?例えば。私がいる環境に応じて、以下を実行してredisに接続します。これはコマンドラインから実行できますか?

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 });
});
31
Tampa

あなたのアプローチは大丈夫ですが、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 });
});

更新:

Expressは、NODE_ENV変数(process.env.NODE_ENV)を調べることで、現在の環境を認識します。 https://github.com/visionmedia/express/blob/master/lib/application.js# L55

アプリの起動時にその変数を次のように設定できます:NODE_ENV=production node app.js(推奨)、Expressコードの前にノードアプリでprocess.env.NODE_ENVを手動で設定するか、Ricardoが言ったようにそのenv変数を〜/ .profileに入れます。

28
alessioalex

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が設定されていることを確認してください(他の回答を1つの方法で参照してください:NODE_ENV=production node app.js)、このように設定変数には、実行するサーバーに適した設定があります。

24
Sean

NODE_ENV環境変数をproductionまたはdevelopmentに、エクスプレスのドキュメントで見られるように: http://expressjs.com/guide.html#configuration

私はただNODE_ENV=development開発マシンの~/.profile(Linuxでは.bashrcまたはbash_profile)、productionの場合も同じことを行います。

17
Ricardo Tomasi

このようなパラメーターのソースを注文することで、さらに包括的なことを行いました。

    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設定、およびデフォルト値を使用できます。

9
Arnaud Rinquin

複数の構成ファイルを作成できる構成モジュールを使用します https://www.npmjs.com/package/config

例えばdefault.json、production.json

サーバーを起動します

エクスポートセットNODE_ENV = production && npm start

0
Ashutosh Jha