使用 pm2 无法访问 ElasticBeanstalk 环境变量

Posted

技术标签:

【中文标题】使用 pm2 无法访问 ElasticBeanstalk 环境变量【英文标题】:ElasticBeanstalk Environment Variables not accessible using pm2 【发布时间】:2021-04-23 23:28:19 【问题描述】:

我已经能够使用下面显示的基本 npm 启动脚本在 ElasticBeanstalk 上成功运行我的应用程序。

"scripts": 
    "start": "NODE_ENV=production node ./bin/www"

在我的服务器上,我现在全局安装了 pm2,并更新了我的 package.json 中的 start 脚本以使用 pm2。

"scripts": 
    "start": "pm2 start ./bin/www"

pm2 启动该过程,我可以从查看日志中看到这一点,但它似乎无法访问我为 ElasticBeanstalk 设置的环境变量。我在文件.ebextensions/options.config 中使用aws:elasticbeanstalk:application:environment 选项设置环境变量,如下所示。

option_settings:
  aws:elasticbeanstalk:application:environment:
    keyOne: foo
    keyTwo: bar
    keyThree: foo

pm2 抱怨无法读取环境变量的 undefined 属性。

0|www    | TypeError: Cannot read property 'keyOne' of undefined
0|www    |     at Object.<anonymous> (/var/app/current/app.js:26:38)
0|www    |     at Module._compile (internal/modules/cjs/loader.js:999:30)
0|www    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
0|www    |     at Module.load (internal/modules/cjs/loader.js:863:32)
0|www    |     at Function.Module._load (internal/modules/cjs/loader.js:708:14)
0|www    |     at Module.require (internal/modules/cjs/loader.js:887:19)
0|www    |     at Module.Hook._require.Module.require (/var/app/current/node_modules/require-in-the-middle/index.js:80:39)
0|www    |     at require (internal/modules/cjs/helpers.js:74:18)
0|www    |     at Object.<anonymous> (/var/app/current/bin/www:7:11)
0|www    |     at Module._compile (internal/modules/cjs/loader.js:999:30)

我需要先获取文件吗?我想避免在 pm2 的生态系统.config.js 文件中设置环境变量,因为我现在还可以使用当前实施的方法从 AWS 控制台以可视方式管理环境变量。

【问题讨论】:

您究竟是如何访问/var/app/current/app.js:26:38 上的环境变量的?只是process.env.keyOne ? 是的,就是这样,我有一个 config.js 文件,它决定读取生产或开发环境变量,但它们的实际读取是process.env.keyOne 您能否编辑您的问题以包含config.js 您是否按照您的要求采购了它们?通常你必须这样做。 【参考方案1】:

如果您已经创建了 PM2 进程,然后更新了环境变量,则应删除 PM2 进程并使用生态系统文件重新创建。

删除和创建操作考虑新创建的环境变量,但不考虑重新启动。我不知道为什么。

【讨论】:

以上是关于使用 pm2 无法访问 ElasticBeanstalk 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

无法在 nodeJS 中获取 pm2 退出或停止事件

node.js项目通过pm2以守护进程方式运行

转)nodejs后台启动方式PM2

pm2无法自动重启

使用屏幕pm2管理服务器应用

pm2 杀死所有东西,如果不重新启动服务器就无法重新启动