我想问一下是否有人知道如何永远运行可以加载.env文件。
目前,如果我们运行forever start app.js
,process.env.foo变得未定义。
TLDR,您需要将--workingDir
路径添加到您的 cronjob 行中。
forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js
以前的许多答案,但没有一个真正解决这个特定的用例。
要使用dotenv永远运行,您需要做两件事。
首先,我们需要使用 dotenv 的预加载功能,这意味着我们需要永远将节点参数传递给进程。 我们可以通过使用 Forever 拥有的-c COMMAND
标志来做到这一点。
第二件事与dotenv
包的工作方式有关。 以下是源代码中的片段:
let dotenvPath = path.resolve(process.cwd(), '.env')
process.cwd()
做什么?
process.cwd() 方法是进程模块的内置应用程序编程接口,用于获取节点.js进程的当前工作目录。
这意味着dovenv
包想要从工作目录加载.env
文件。 因此,要解决此问题,我们可以使用 Forever's--workingDir
标志来指定进程的实际工作目录。
最终命令将如下所示:
forever -c "node -r dotenv/config" --workingDir app-workdir-path start app.js
其中app-workdir-path
是项目目录的绝对路径。
对我有用的是指定完整路径:
require('dotenv').config({ path: '/opt/api/.env' });
您可以使用 dotenv 包来实现此目的。在应用条目上执行此操作
require('dotenv').config({ path: '.env' })
如果您在项目的根目录中添加了.env
文件,那么您可以像这样使用require('dotenv').config()
或者,如果您使用不同的位置创建了文件.env
则在代码中使用require('dotenv').config({path : '/your/path/.env'})
我发现了你的问题,但遇到了同样的问题。我不认为dotenv
永远有效 - 至少不是我能够开始工作。但是,我认为您可以使用一种解决方法。我能够在 forever 命令之前的命令行上指定环境变量,并将这些环境变量永久传递给我的节点应用程序。
~$ ENV=production forever start yourApp.js
有关在命令行上指定环境变量的更多信息,请查看此堆栈溢出问题。
我在多服务器永久配置中遇到了这个问题。
您应该包含指向项目目录根目录--workingDir
参数,以防您在根目录中包含.env
文件并使用 dotenv
例:
- 具有最小"硬编码"值的灵活配置
- 放置在根目录中的
.env
- 以
dotenv.config()
形式使用的"DOTENV"
一台服务器情况下的多服务器配置代码:
const fs = require('fs');
const path = require('path');
let foreverConfig = [
{
uid: 'scheduledJobsServer',
append: true,
watch: true,
script: 'scheduledJobsServer.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
},
{
uid: 'mainServer',
append: true,
watch: true,
script: 'server.js',
sourceDir: path.join(__dirname, '/server'),
workingDir: path.join(__dirname)
}
];
try {
fs.writeFileSync(
path.join(__dirname, '/foreverConfig.json'),
JSON.stringify(foreverConfig),
{ encoding: 'utf8' }
);
let consoleMessage = 'Init script success';
console.log('x1b[42m%sx1b[0m', consoleMessage);
} catch (e) {
console.log('Init script error:', e);
process.exit(1);
}
然后运行forever start foreverConfig.json
有时您必须从另一个目录调用节点脚本。例如,在运行 cron 作业时。以下是您可以执行的操作:
cd /path/to/script/ && /usr/bin/forever start /usr/bin/node script.js
现在将加载 .env 文件。
对我来说最简单的命令是
dotenv -e .env forever start build/index.js