[英]AWS Lambda Environment Variables not set, process.env undefined in Node
[英]Environment Variables not loading to process.env in Nodejs
我正在構建一個 nodejs api 並將dotenv
包設置為開發依賴項,以將變量加載到開發人員本地機器上的process.env
。
請注意,當我登錄時,我使用sudo -i
作為root
進行操作。
我的意圖是在部署期間,環境變量將在我的 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
你可以在這里閱讀更多:
我遇到了同樣的問題,這是因為 Visual Studio 和 Visual Studio 代碼中的集成終端,除非您在管理模式下運行編輯器,否則它們似乎無法訪問任何這些變量。所以要解決這個問題,您只需要在 Amin 模式下啟動你的編輯器
確保您在 app.js 文件中有此代碼
> const path = require('path'); require('dotenv').config({ path:
> path.join(__dirname, '.env') });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.