PM2环境变量缓存
PM2 environment variables caching
我是 运行 PM2 Ubuntu 16.04,环境变量似乎以某种方式被缓存了。有没有办法查看 PM2 正在使用哪些环境变量。它能以某种方式看到的环境变量在我的终端会话中不再可用 echo $VAR_NAME
。
我这样创建了环境变量:
export VAR_NAME=value
删除环境变量使用:
unset VAR_NAME
不起作用 PM2 顽固地保留环境变量 - 即使在各种重启和 ssh 会话之后也是如此。让我感到困惑:-/
有没有办法刷新 PM2 使用的环境变量?或者至少看看它知道哪些环境变量?
更新原答案:
如果环境变量的值是预设的,例如在开发、暂存和生产环境变量不同的情况下,可以选择使用 process.json
文件。
以下是 node.js 应用程序的示例:
{
"apps" : [{
"env": {
// in this section you would list variables that you
// want available in all cases
"NODE_PATH": "..."
},
"env_development": {
"CONFIG": "dev.conf.json",
"NODE_ENV": "development"
},
"env_production" : {
"CONFIG": "conf.json",
"NODE_ENV": "production"
},
"exec_mode": "fork", // or cluster if that's what you want
"name" : "my_app",
"script" : "/var/my_app/app.js", //srcipt's path
"watch" : false // don't restart on file changes
}]
}
定义了这个文件,使用 env 的可能值,您可以通过重新启动应用程序来切换环境,如下所示:
正常启动应用程序:pm2 start process.json --env development
当你想切换到不同的环境时:pm2 restart process.json --env production
有关 process.json
和可能选项的更多信息:PM2 - Process File
原回答:
你必须先杀掉pm2。
pm2 kill
pm2 start app.js
PM2 保留它在启动时读取的环境变量,它不会每次都重新读取它们的值。
我很快搜索了一下,在 github 上找到了这个问题:https://github.com/Unitech/pm2/issues/83,Unitech 的回答证实了这一点。
在此特定评论中:https://github.com/Unitech/pm2/issues/83#issuecomment-29837221
Unitech 说:
Yep this is normal in "cluster_mode". As pm2 wrap your code to his own context (and own variables) you get what was already there when launching pm2.
我是 运行 PM2 Ubuntu 16.04,环境变量似乎以某种方式被缓存了。有没有办法查看 PM2 正在使用哪些环境变量。它能以某种方式看到的环境变量在我的终端会话中不再可用 echo $VAR_NAME
。
我这样创建了环境变量:
export VAR_NAME=value
删除环境变量使用:
unset VAR_NAME
不起作用 PM2 顽固地保留环境变量 - 即使在各种重启和 ssh 会话之后也是如此。让我感到困惑:-/
有没有办法刷新 PM2 使用的环境变量?或者至少看看它知道哪些环境变量?
更新原答案:
如果环境变量的值是预设的,例如在开发、暂存和生产环境变量不同的情况下,可以选择使用 process.json
文件。
以下是 node.js 应用程序的示例:
{
"apps" : [{
"env": {
// in this section you would list variables that you
// want available in all cases
"NODE_PATH": "..."
},
"env_development": {
"CONFIG": "dev.conf.json",
"NODE_ENV": "development"
},
"env_production" : {
"CONFIG": "conf.json",
"NODE_ENV": "production"
},
"exec_mode": "fork", // or cluster if that's what you want
"name" : "my_app",
"script" : "/var/my_app/app.js", //srcipt's path
"watch" : false // don't restart on file changes
}]
}
定义了这个文件,使用 env 的可能值,您可以通过重新启动应用程序来切换环境,如下所示:
正常启动应用程序:
pm2 start process.json --env development
当你想切换到不同的环境时:
pm2 restart process.json --env production
有关 process.json
和可能选项的更多信息:PM2 - Process File
原回答:
你必须先杀掉pm2。
pm2 kill
pm2 start app.js
PM2 保留它在启动时读取的环境变量,它不会每次都重新读取它们的值。
我很快搜索了一下,在 github 上找到了这个问题:https://github.com/Unitech/pm2/issues/83,Unitech 的回答证实了这一点。
在此特定评论中:https://github.com/Unitech/pm2/issues/83#issuecomment-29837221
Unitech 说:
Yep this is normal in "cluster_mode". As pm2 wrap your code to his own context (and own variables) you get what was already there when launching pm2.