【发布时间】:2019-10-04 10:18:56
【问题描述】:
我正在尝试在我的 NodeJS 应用程序上运行一些需要通过 SSH 运行的命令(例如 Sequelize 播种),但是当我这样做时,我注意到缺少预期的 env var。
如果我在本地计算机上运行 eb printenv,我会看到在我的 EB 仪表板中设置的预期环境变量
如果我通过 SSH 登录并运行 printenv,我期望的所有这些变量都会丢失。
那么会发生什么,当我运行种子时,我得到一个错误:
node_modules/.bin/sequelize db:seed:all
ERROR: connect ECONNREFUSED 127.0.0.1:3306
我注意到端口错误,应该是 5432。我检查了我的环境变量是否设置为printenv,但它们不存在。这让我怀疑我的 ssh 会话中没有加载正确的 env 变量,并且 NodeJS 正在回退到我在配置中提供的默认值。
我在网上找到了一些解决方案,比如运行以下加载环境变量:
/opt/python/current/env
但是python目录不存在。 /opt/ 中的所有内容都是 elasticbeanstalk 和 aws 目录。
我取得了一些成功,因此我至少可以通过运行以下命令看到环境变量存在于服务器上的某个位置:
sudo /opt/elasticbeanstalk/bin/get-config environment --output YAML
但是仅仅运行这个命令并不能解决问题。它所做的只是将预期的环境变量输出到屏幕上。那是东西!至少我知道他们肯定在那里!但是当我运行printenv时,环境变量仍然不存在@
那么我该如何解决这个问题呢? Sequelize 和 NodeJS 显然也没有看到 env 变量,它正在尝试使用在我的配置文件中设置的后备默认值。
【问题讨论】:
标签: node.js amazon-web-services amazon-elastic-beanstalk