Ken*_*ore 13 node.js express pm2
所以我第一次部署了一个带节点和pm2的站点,我要回去做一些优化并阅读最佳实践等.
我读到你可以通过设置获得很多好处NODE_ENV=production.
我在pm2文档中发现了这个:
[process.json]
"env_production" : {
"NODE_ENV": "production"
}
...
$ pm2 start process.json --env production
Run Code Online (Sandbox Code Playgroud)
所以,我做到了,但我不知道它是否有效.在试图找出如何检查它时,我学会了尝试:
$ node
> process.env.NODE_ENV
> undefined
Run Code Online (Sandbox Code Playgroud)
所以,这不是一个好兆头......但是,由于我对低级别的东西的工作原理有限,我猜可能pm2会将每个应用程序作为一个单独的节点进程启动?所以,当我尝试检查它时,我可能不是在正确的过程中.
另外,我不知道是否必须创建一个新的〜/ .pm2/dump.pm2文件,因为可能只要覆盖我设置的选项?(因为我用过pm2 startup).
如何检查我的pm2应用程序的NODE_ENV是否已设置?
Ken*_*ore 21
要更明确地回答标题中的实际问题:
在您的脚本中,对我来说,我的Express应用程序的app.js文件,您可以使用process.env.NODE_ENV获取当前值NODE_ENV并记录下来,如果您需要.
更好的方法是使用PM2的Process Metrics模块,也就是说pmx.
yarn add pmx
Run Code Online (Sandbox Code Playgroud)
要么
npm install pmx --save
Run Code Online (Sandbox Code Playgroud)
然后
const Probe = require('pmx').probe()
Probe.metric({
name : 'NODE_ENV',
value : function() {
return process.env.NODE_ENV
}
})
Run Code Online (Sandbox Code Playgroud)
现在它将显示在pm2 show app.js(底部)或pm2 monit(左下角)的调用中.
似乎所有实际需要的是你杀死并重新启动进程来改变你的环境.
$ pm2 kill && pm2 start pm2.json --env production
Run Code Online (Sandbox Code Playgroud)
以下不够好:
pm2 restart pm2.json --env production
Run Code Online (Sandbox Code Playgroud)
你必须杀死这个过程
所以,我得到了它的工作.我认为它与在init脚本中保存的环境有关,因为在擦除所有内容并重新启动它之后就可以了.
这就是我做到的.
yarn add pmx
Run Code Online (Sandbox Code Playgroud)
哪个输出以下命令给我复制粘贴:
npm install pmx --save
Run Code Online (Sandbox Code Playgroud)
然后:
const Probe = require('pmx').probe()
Probe.metric({
name : 'NODE_ENV',
value : function() {
return process.env.NODE_ENV
}
})
Run Code Online (Sandbox Code Playgroud)
process.env.NODE_ENV 是我的配置文件.
然后我检查了日志,果然,它说NODE_ENV而不是pmx.
总而言之,我认为我没有任何错误,但我已经生成了init脚本并保存了配置,并且由于某种原因它没有使用新环境.
小智 8
您还可以NODE_ENV通过运行来检查您的pm2 show <yourServerName>。这将输出有关您正在运行的服务器的信息,包括node env.
此外,您可以通过运行来检查您的环境变量pm2 env 0。这将显示正在运行的节点进程的所有环境变量。
首先npm,将其添加到您的package.json:
"scripts": {
"myScript": "NODE_ENV=production pm2 start server.js"
}
Run Code Online (Sandbox Code Playgroud)
然后
npm start myScript
Run Code Online (Sandbox Code Playgroud)
您也可以直接执行此操作,但这很容易管理,可以自动执行crontab,并且在您的源代码管理中...
小智 5
您的process.json文件不完整.尝试使用这样的东西:
[process.json]
{
"name" : "MyApp",
"script" : "myapp.js",
"env_production" : {
"NODE_ENV": "production"
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的代码中添加日志记录,最好是在启动时somwhere:
console.log("NODE_ENV : ", process.env.NODE_ENV);
Run Code Online (Sandbox Code Playgroud)
现在启动应用程序:
pm2 start process.json --env production
Run Code Online (Sandbox Code Playgroud)
最后观看应用日志:
pm2 logs MyApp
Run Code Online (Sandbox Code Playgroud)
这应该做到这一点.
| 归档时间: |
|
| 查看次数: |
29617 次 |
| 最近记录: |