所以我第一次部署了一个带节点和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是否已设置?
答案 0 :(得分:20)
更明确地回答标题中的实际问题:
在您的脚本中,对我来说,我的Express应用程序app.js
文件,您可以使用process.env.NODE_ENV
获取NODE_ENV
的当前值,并根据需要将其记录下来。
更好的方法是使用PM2的流程度量模块,即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显示<appname>
(底部)或pm2 monit(左下角)的调用中。
看来实际需要的只是你杀死并重新启动流程来改变你的环境。
$ pm2 kill && pm2 start pm2.json --env production
以下情况不够好:
pm2 restart pm2.json --env production
你必须杀死进程
所以,我得到了它的工作。我认为它与在init脚本中保存的环境有关,因为在擦除所有内容并重新开始之后它就可以工作。
我是这样做的。
$ pm2 stop all && pm2 kill && rm -R ~/.pm2 && sudo rm -R /root/.pm2
$ pm2 startup
我输出以下命令进行复制粘贴:
$ sudo su -c "env PATH=$PATH:/usr/bin pm2 startup linux -u myusername --hp /home/myusername"
然后:
/srv/http/project $ pm2 start pm2.json --env production
pm2.json
是我的配置文件。
然后我检查了日志,当然,它说的是production
而不是undefined
。
总而言之,我认为我没有任何错误,但我已经生成了init脚本并保存了配置,并且由于某种原因它没有使用新环境。
答案 1 :(得分:5)
您的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
这应该这样做。
答案 2 :(得分:4)
将其添加到npm
:
package.json
一起开始
"scripts": {
"myScript": "NODE_ENV=production pm2 start server.js"
}
然后
npm start myScript
您也可以直接执行,但这很容易管理,自动化crontab
并且在您的源代码管理中......
答案 3 :(得分:4)
您还可以通过运行NODE_ENV
检查pm2 show <yourServerName>
。这将输出有关正在运行的服务器的信息,包括node env
。
此外,您可以通过运行pm2 env 0
检查环境变量。这将显示正在运行的节点进程的所有环境变量。
答案 4 :(得分:3)
您可以在服务器脚本的开头打印环境变量的值,然后检查PM2日志。使用以下代码打印环境变量值:
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
然后使用以下代码查看PM2日志
pm2记录app_name
此处app_name
是您的流程名称,由process.json
文件中的条目指示。
答案 5 :(得分:0)
您可以专门为 pm2 设置环境变量。
前往 /etc/systemd/system/
位置。
你可以看到一个名为 pm2-username.service
的文件
文件。 (例如: pm2-root.service )您可以直接为 pm2 添加环境变量。
对我来说,它是 LD_LIBRARY_PATH 。所以我在 PATH 变量之后添加了如下行。
Environment=PATH=/usr/local/lib......
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_21_1
之后,您可以使用 update-env 标志重新启动或启动节点应用程序,
pm2 start yourapp --update-env
答案 6 :(得分:-3)
在您的终端中键入:
echo NODE_ENV
它将打印当前选择的环境变量