如何检查我的 pm2 应用 NODE_ENV 是否已设置?
How can I check if my pm2 app NODE_ENV is getting set?
所以我第一次用 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 是否已设置?
可能在您的服务器脚本开始时您可以打印环境变量的值,然后检查 PM2 日志。使用以下代码打印您的环境变量值:
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
然后使用以下代码查看PM2日志
pm2 日志 app_name
此处 app_name
是您的进程名称,如 process.json
文件中的条目所示。
通过将此添加到您的 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
这应该可以做到。
回答标题中的实际问题:
在你的脚本中,对于我来说,我的 Express 应用程序的 app.js
文件,你可以使用 process.env.NODE_ENV
来获取 NODE_ENV
的当前值,并在需要时将其注销。
更好的方法是使用 PM2 的 Process Metrics 模块,又名 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
您还可以通过 运行 pm2 show <yourServerName>
查看您的 NODE_ENV
。这将输出有关您的 运行 服务器的信息,包括 node env
.
此外,您可以通过运行 pm2 env 0
检查您的环境变量。这将显示 运行 节点进程的所有环境变量。
在您的终端中输入:
echo NODE_ENV
它将打印当前选择的环境变量
可以专门为pm2设置环境变量
前往 /etc/systemd/system/
位置。
你可以看到一个名为 pm2-username.service
的文件
文件。 (eg: pm2-root.service ) 你可以直接为pm2添加一个Enviorment变量。
对我来说,是 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
试试 pm2 env <app_name/id>
你也可以在 pm2 show <app_name/id>
中找到 NODE_ENV
所以我第一次用 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 是否已设置?
可能在您的服务器脚本开始时您可以打印环境变量的值,然后检查 PM2 日志。使用以下代码打印您的环境变量值:
console.log('process.env.NODE_ENV:', process.env.NODE_ENV);
然后使用以下代码查看PM2日志
pm2 日志 app_name
此处 app_name
是您的进程名称,如 process.json
文件中的条目所示。
通过将此添加到您的 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
这应该可以做到。
回答标题中的实际问题:
在你的脚本中,对于我来说,我的 Express 应用程序的 app.js
文件,你可以使用 process.env.NODE_ENV
来获取 NODE_ENV
的当前值,并在需要时将其注销。
更好的方法是使用 PM2 的 Process Metrics 模块,又名 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
您还可以通过 运行 pm2 show <yourServerName>
查看您的 NODE_ENV
。这将输出有关您的 运行 服务器的信息,包括 node env
.
此外,您可以通过运行 pm2 env 0
检查您的环境变量。这将显示 运行 节点进程的所有环境变量。
在您的终端中输入:
echo NODE_ENV
它将打印当前选择的环境变量
可以专门为pm2设置环境变量
前往 /etc/systemd/system/
位置。
你可以看到一个名为 pm2-username.service
的文件
文件。 (eg: pm2-root.service ) 你可以直接为pm2添加一个Enviorment变量。
对我来说,是 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
试试 pm2 env <app_name/id>
你也可以在 pm2 show <app_name/id>