如何检查我的pm2应用程序NODE_ENV是否已设置?

时间:2016-06-23 21:40:01

标签: node.js express pm2

所以我第一次部署了一个带节点和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是否已设置?

7 个答案:

答案 0 :(得分:20)

编辑2:

更明确地回答标题中的实际问题:

在您的脚本中,对我来说,我的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(左下角)的调用中。

编辑1:

看来实际需要的只是你杀死并重新启动流程来改变你的环境。

$ 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

它将打印当前选择的环境变量