gpt4 book ai didi

node.js - 环境变量未加载到 Nodejs 中的 process.env

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:48 27 4
gpt4 key购买 nike

我正在构建一个nodejs api,并将dotenv包设置为开发依赖项,以将变量加载到开发人员本地计算机上的process.env

请注意,当我登录时,我使用 sudo -iroot 身份进行操作。

我的意图是,在部署期间,环境变量将在我的 Ubuntu 主机中的 /etc/environment 下设置,直接加载到进程中,然后应用程序将仅针对该配置运行。

为此,我在 server.js 的开头添加了一行:

if(process.env.NODE_ENV === 'development') {
logger.info("Loading dotenv for development environment")
require('dotenv').config();
}

并且开发人员将被指示向他们的系统中添加 NODE_ENV 的环境变量。

现在,在我的 Ubuntu EC2 实例中,我已经设置了 /etc/environment 以包含我想要的环境变量(请注意,NODE_ENV 此处为“dev”只是为了避免运行 dotenv):

PORT=MYPORT
NODE_ENV=dev
APP_SECRET_KEY='MYSECRET'
APP_DATABASE_LOGIN=MYLOGIN
APP_DATABASE_PASSWORD='MYPASS'
APP_DATABASE_HOST=MYHOST
APP_DATABASE_NAME=MYDB
APP_DATABASE_PORT=MYDBPORT

当我重新启动并运行 printenv 时,它们都会根据文件进行填充。

我已设置 pm2 直接从 server.js 运行我的应用程序,无需任何其他配置,因为据我了解,process.env从环境变量自动填充。

但是,当我记录 process.env 中的值时,所有内容都为 null:

logger.info({
connectionConfig: {
host: process.env.APP_DATABASE_HOST
, login: process.env.APP_DATABASE_LOGIN
, port: process.env.APP_DATABASE_PORT
, databaseName: process.env.APP_DATABASE_NAME
}
});

这里的配置有问题吗?

注意:根据下面的答案,我在启动 pm2 后错误地设置了环境变量,因此 pm2 缓存丢失了它们

最佳答案

问题是 pm2 缓存了环境变量。

你必须做:

# all apps
pm2 restart all --update-env
# specific app
pm2 restart {pid} --update-env

如果由于某种原因不起作用,记录的方法是:

pm2 reload ecosystem.json --update-env

您可以在 here 中阅读更多内容:

关于node.js - 环境变量未加载到 Nodejs 中的 process.env,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420151/

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