web-dev-qa-db-ja.com

pm2アプリNODE_ENVが設定されているかどうかを確認するにはどうすればよいですか?

そのため、初めてnodeとpm2を使用してサイトを展開し、戻って最適化を行い、ベストプラクティスなどを読んでいます。

NODE_ENV=productionを設定すると、多くのメリットが得られることを読みました。

私はこれをpm2ドキュメントで見つけました:

[process.json]
"env_production" : {
  "NODE_ENV": "production"
}

...

$ pm2 start process.json --env production

だから、私はそれをやったが、それが機能しているかどうかわからない。それを確認する方法を理解しようとしながら、私は試してみました:

$ node
> process.env.NODE_ENV
> undefined

だから、それは良い兆候ではない..しかし、低レベルのものがどのように機能するかについての私の限られた理解では、おそらくpm2は各アプリを個別のノードプロセスとして起動すると推測できますか?それで、私はそれをチェックしようとするとき、私は正しいプロセスにいないのかもしれません。

また、新しい〜/ .pm2/dump.pm2ファイルを作成する必要があるかどうかもわかりません。多分それが設定したオプションをオーバーライドする可能性があるからです。 (pm2 startupを使用したため)。

Pm2アプリのNODE_ENVが設定されているかどうかを確認するにはどうすればよいですか?

13
Kenmore

タイトルの実際の質問に答えるには:

私のExpressアプリのapp.jsファイルでは、スクリプト内でprocess.env.NODE_ENVを使用してNODE_ENVの現在の値を取得し、必要に応じてログアウトできます。

さらに良い方法は、PM_2のプロセスメトリックモジュール(別名pmx)を使用することです。

yarn add pmx

または

npm install pmx --save

それから

const Probe = require('pmx').probe()

Probe.metric({
  name    : 'NODE_ENV',
  value   : function() {
    return process.env.NODE_ENV
  }
})

これで、pm2 monitの呼び出しで表示されます(左下)。


環境を変更するには:

環境を変更するには、プロセスを強制終了して再起動する必要があります。

$ pm2 kill && pm2 start pm2.json --env production

以下は十分ではありません:

pm2 restart pm2.json --env production
21
Kenmore

package.jsonにこれを追加して、npmで開始します。

"scripts": {
  "myScript": "NODE_ENV=production pm2 start server.js"
}

それから

npm start myScript

直接行うこともできますが、これは管理が容易で、crontabを自動化し、ソース管理にあります...

5
malix

Process.jsonファイルが不完全です。次のようなものを使用してみてください。

[process.json]
{
  "name" : "MyApp",
  "script" : "myapp.js",
  "env_production" : {
    "NODE_ENV": "production"
  }
}

次に、できれば起動時にコードにログを追加します。

console.log("NODE_ENV : ", process.env.NODE_ENV);

次に、アプリケーションを開始します。

pm2 start process.json --env production

最後に、アプリのログを見る:

pm2 logs MyApp

これでうまくいくはずです。

5

サーバースクリプトの開始時に、環境変数の値を出力し、PM2ログを確認できます。次のコードを使用して、環境変数値を印刷します。

console.log('process.env.NODE_ENV:', process.env.NODE_ENV);

そして、次のコードを使用してPM2ログを表示します

pm2はapp_nameをログに記録します

ここで、app_nameは、process.jsonファイルのエントリで示されるプロセス名です。

3
yeiniel