pm2 --update-env 选项似乎不起作用

问题描述 投票:0回答:5

我通过使用生态系统.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
选项不起作用?我做错了什么?

node.js pm2
5个回答
32
投票

我发现更新 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


12
投票

pm2 restart <pid> --update-env
按照this答案

中的建议为我工作

3
投票
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。


1
投票

尝试写入 Z:\ 驱动器时发生此更新错误

但是,我的 Windows 操作系统机器中没有 Z:\ 驱动器

以下帮助解决了该问题:

1 .添加用户环境变量如下:

PM2_HOME=%USERPROFILE%\.pm2

2 .然后杀掉pm2守护进程一次

pm2 kill

现在

pm2 update
工作正常。


0
投票

一个原因也可能是这样。

假设您有 2 个存储库。

/repo-backend-1
/repo-backend-2

例如,在第一个存储库中,有一个 env 文件。

S3_SECRET=efgh


在第二个存储库中,有一个 env 文件作为例子。

S3_SECRET=abcd


您将在 pm2 开始 repo-1。 所以首先需要

S3_SECRET=efgh

。
然后您将通过 pm2 启动第二个 repo-2。
那么就需要
S3_SECRET=abcd

因此在第一个存储库中,环境变量将为 abcd 并且凭据不匹配。

因此请确保两个环境变量相同。

© www.soinside.com 2019 - 2024. All rights reserved.