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

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

编辑2:

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

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

编辑1:

似乎所有实际需要的是你杀死并重新启动进程来改变你的环境.

$ 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。这将显示正在运行的节点进程的所有环境变量。


mal*_*lix 5

首先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)

这应该做到这一点.