我通过使用生态系统.config.js 启动了我的节点应用程序,如下所示。
pm2 start ecosystem.config.js
我的ecosystem.config.js在这里。
module.exports = {
/**
* Application configuration section
* http://pm2.keymetrics.io/docs/usage/application-declaration/
*/
apps : [
// First application
{
name : "API",
script : "./app/index.js",
env: {
COMMON_VARIABLE: "true"
},
env_production : {
NODE_ENV: "production"
}
},
],
/**
* Deployment section
* http://pm2.keymetrics.io/docs/usage/deployment/
*/
deploy : {
production : {
user : "node",
host : "212.83.163.1",
ref : "origin/master",
repo : "[email protected]:repo.git",
path : "/var/www/production",
"post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env production"
},
dev : {
user : "node",
host : "212.83.163.1",
ref : "origin/master",
repo : "[email protected]:repo.git",
path : "/var/www/development",
"post-deploy" : "npm install && pm2 startOrRestart ecosystem.json --env dev",
env : {
NODE_ENV: "dev"
}
}
}
}
然后我尝试更改配置文件以打开观看模式。我读了 this document 所以,我添加了
watch: true
属性,然后我尝试 pm2 restart ecosystem.config.js --update-env
应用更改后的配置。
应用程序已重新启动,属性似乎已更改,因为当我尝试
pm2 list
时,观看已启用。但是更改代码后我的应用程序没有重新启动。
所以,我刚刚尝试了
pm2 delete 0
,pm2 start ecosystem.config.js
,然后效果很好。
为什么
--update-env
选项不起作用?我做错了什么?
我发现更新 pm2 应用程序配置的唯一可靠方法是
pm2 kill
停止守护进程,或者 pm2 delete <id|name> && pm2 start ecosystem.config.js
用于单个应用程序(如 @hshan 提到的)。
此问题声称已于 2014 年修复,但那里的评论以及我发现的一串其他问题/问题似乎表明并非如此: https://github.com/Unitech/pm2/issues/528
更新:这里也正在进行讨论:https://github.com/Unitech/pm2/issues/3192
pm2 restart <pid> --update-env
按照this答案中的建议为我工作
pm2 restart ecosystem.config.js --env production
我不需要 --update-env 但我确实需要在重新启动时再次指定 env
我发现的另一个选项是在命令行上指定 var:
MY_VAR=1234 pm2 restart ecosystem.config.js
有趣的是,这会将其保留在之前的环境中,但 cmd 行 var 将覆盖您在 Ecosystem.config.js 中相同变量的值。
但是
MY_VAR=1234 pm2 restart ecosystem.config.js --env production
如果您在生产生态系统中定义了命令行 MY_VAR,则将覆盖命令行 MY_VAR。
尝试写入 Z:\ 驱动器时发生此更新错误
但是,我的 Windows 操作系统机器中没有 Z:\ 驱动器
以下帮助解决了该问题:
1 .添加用户环境变量如下:
PM2_HOME=%USERPROFILE%\.pm2
2 .然后杀掉pm2守护进程一次
pm2 kill
现在
pm2 update
工作正常。
一个原因也可能是这样。
假设您有 2 个存储库。
/repo-backend-1
/repo-backend-2
例如,在第一个存储库中,有一个 env 文件。
S3_SECRET=efgh
S3_SECRET=abcd
S3_SECRET=efgh
。 然后您将通过 pm2 启动第二个 repo-2。 那么就需要
S3_SECRET=abcd
。因此在第一个存储库中,环境变量将为 abcd 并且凭据不匹配。
因此请确保两个环境变量相同。