gpt4 book ai didi

node.js - Elastic Beanstalk 环境变量在 SSH 中丢失

转载 作者:行者123 更新时间:2023-12-04 11:46:03 25 4
gpt4 key购买 nike

我试图在我的 NodeJS 应用程序上运行一些需要通过 SSH 运行的命令(例如 Sequelize 播种),但是当我这样做时,我注意到预期的 env vars 丢失了。

如果我运行 eb printenv在我的本地机器上,我看到了在我的 EB 仪表板中设置的预期环境变量

如果我通过 SSH 连接并运行 printenv ,我期望的所有这些变量都丢失了。

那么会发生什么,当我运行我的种子时,我收到一个错误:

node_modules/.bin/sequelize db:seed:all
ERROR: connect ECONNREFUSED 127.0.0.1:3306

我注意到端口不对,应该是5432。我检查了我的环境变量是否设置为 printenv他们不在那里。这让我怀疑我的 ssh session 中没有加载正确的 env 变量,并且 NodeJS 正在回退到我在配置中提供的默认值。

我在网上找到了一些解决方案,比如运行以下命令来加载 env 变量:
/opt/python/current/env

但是python目录不存在。里面的一切 /opt/elasticbeanstalkaws目录。

我取得了一些成功,所以我至少可以通过运行以下命令看到 env 变量存在于服务器上的某处:
sudo /opt/elasticbeanstalk/bin/get-config environment --output YAML

但是仅仅运行这个命令并不能解决问题。它所做的只是将预期的环境变量输出到屏幕上。那是东西!至少我知道他们肯定在那里!但是当我运行 printenv 时,环境变量仍然不存在

那么我该如何解决这个问题呢? Sequelize 和 NodeJS 显然也没有看到 env 变量,它试图使用在我的配置文件中设置的后备默认值。

最佳答案

我知道我的回答晚了,但我遇到了同样的问题,在尝试使用 bash 脚本后,我找到了一种将它存储在您的环境变量中的方法。
您可以简单地运行以下命令:

export env=`/opt/elasticbeanstalk/bin/get-config environment -k <your-variable-name>`
现在您将能够轻松访问此变量:
echo $your-variable-name
之后,您可以利用 env var 做您喜欢的任何事情。就我而言,我使用它来决定在名为 build-script.sh 的文件中构建哪个版本的代码。其内容如下:
# get env variable to know in which environment this code is running in
export env=`/opt/elasticbeanstalk/bin/get-config environment -k environment`

# building the code based on the current environment
if [ $env = "production" ]
then
echo "building for production"
npm --prefix /var/app/current run build-prod
else
echo "building for non production"
npm --prefix /var/app/current run build-prod
fi
希望这可以帮助任何面临同样问题的人🤟🏻

关于node.js - Elastic Beanstalk 环境变量在 SSH 中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56180378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com