そのため、初めて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が設定されているかどうかを確認するにはどうすればよいですか?
タイトルの実際の質問に答えるには:
私の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
package.json
にこれを追加して、npm
で開始します。
"scripts": {
"myScript": "NODE_ENV=production pm2 start server.js"
}
それから
npm start myScript
直接行うこともできますが、これは管理が容易で、crontab
を自動化し、ソース管理にあります...
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
これでうまくいくはずです。
サーバースクリプトの開始時に、環境変数の値を出力し、PM2ログを確認できます。次のコードを使用して、環境変数値を印刷します。
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
そして、次のコードを使用してPM2ログを表示します
pm2はapp_nameをログに記録します
ここで、app_name
は、process.json
ファイルのエントリで示されるプロセス名です。