我有一个应用程序在本地(没有pm2).env
文件中的所有环境变量使用dotenv
工作正常。
但是在我使用pm2
运行应用的服务器上,环境变量仍为undefined
。
我用来在服务器上运行应用程序的pm2命令是:
pm2 start myapp/app.js
pm2 startup
pm2 save
答案 0 :(得分:10)
dotenv
将读取位于当前目录中的.env
文件。
当您致电pm2 start myapp/app.js
时,它不会搜索myapp/.env
。
.env // It will try to load this, which doesn't exist
myapp/
app.js
所以你有两个解决方案
使用path
选项:
const path = require('path');
require('dotenv').config({ path: path.join(__dirname, '.env') });
或者从myapp/
pm2 start app.js
答案 1 :(得分:3)
您先杀死了pm2进程
尝试
pm2 kill
然后使用重新启动pm2
pm2 start app.js
答案 2 :(得分:1)
我遇到了同样的问题,但是没有明确解释,因此这里的解决方案基于 github用户vmarchaud comment。 这也解决了人们使用@Andy Lorenz解决方案时遇到的问题。
就我而言,我想为多个应用程序创建一个生态系统文件,但我一直在获取
Error: Cannot find module 'dotenv/config'
解决方案很简单。 您必须声明cwd,即要从中读取dotenv / config的项目文件夹。
module.exports = {
apps: [{
name: 'app1 name',
script: 'app1.js',
cwd: '/path/to/folder/',
exec_mode: 'fork_mode',
node_args: '-r dotenv/config',
}, {
name: 'app2 name',
script: 'app2.js',
cwd: '/path/to/folder/',
instances: 'max',
exec_mode: 'cluster',
node_args: '-r dotenv/config',
}],
};
答案 3 :(得分:0)
这里的一个好模式是从您的代码中删除dotenv并在命令行上“要求”它。这样一来,您的代码就可以在任何环境(包括基于云的环境)之间很好地进行传输-这是环境变量的主要功能之一。
a)在脚本(例如app.js)旁边编码.env文件
b)在不使用pm2的情况下运行脚本:
node -r dotenv/config app.js
pm2.config.js中的c):
module.exports = {
apps : [{
name : 'My Application',
script : 'app.js',
node_args : dotenv/config',
...
}],
}
然后
pm2 start pm2.config.js
注意:在命令行上使用dotenv / config是dotenv自己推荐的最佳实践之一。
答案 4 :(得分:0)
我使用的是@Marcos答案的简单得多的版本:
.env
app.js
例如,我们需要将令牌存储在.env
文件中,并将其直接传递给app.js
:
在.env内部
token=value
在app.js内部:
require('dotenv').config();
console.log(process.env.token)
也不要忘记。如果将.env文件添加到.gitignore,然后git pull
在VPS或smth上回购,则需要手动复制.env文件,否则您的应用程序将无法正常工作。
在某些情况下,使用配置的区域很重要,因此请确保将NODE_ENV=production
字符串添加到.env文件中。
毕竟,您可以直接在应用程序的文件夹中使用pm2 start app.js
。
答案 5 :(得分:0)
这是我的项目设置..
/src/app.ts
然后编译到 dist 文件夹中。
/dist/app.js
我的 .env 文件在 dist 文件夹之外,因此无法访问。
这是我试过的命令。 pm2 启动 app.js --env=.env
答案 6 :(得分:0)
这些都不适合我,因为我使用的是集群模式。
我在根目录中安装了 dotenv 作为 dev 依赖项(我也使用了 yarn 工作区)。
然后我这样做了:
require('dotenv').config({ path: 'path/to/your/.env' })
module.exports = {
apps: [
{
name: 'app',
script: 'server/dist/index.js',
instances: 2,
exec_mode: 'cluster',
instance_var: 'APP_INSTANCE_SEQ',
// listen_timeout: 10000,
// restart_delay: 10000,
}
]
}