使用环境变量的 Node.js forever

46

我在服务器上启动我的Node应用程序的命令是:

sudo IS_PROD=1 node app.js

我已经安装了,但似乎无法传递环境变量。

sudo IS_PROD=1 forever node app.js

看起来似乎行不通。我已经试过几种变体了。我该如何执行这个命令或永久设置环境变量?

2个回答

98
首先,在你的命令中应该跳过 node 这个东西,它不应该存在,你不应该能够执行它。 会自动使用 启动你的脚本。相反,你应该这样做;
sudo IS_PROD=1 forever app.js

可能你不想在前台启动服务器,而是希望将服务器作为守护进程启动。例如:

sudo IS_PROD=1 forever start app.js

这将创建一个在后台监视您的节点应用程序并在其退出时重新启动它的进程。有关更多信息,请参见readme
这两种方法都保留环境变量,就像您只使用node一样。

1
我有一个小问题,因为我假设这个环境变量在每次由forever进行的服务器重启时都会被保留,那么我是否可以以某种方式传递不同的变量来处理重新启动而不是第一次启动的情况。 我只想在第一次启动时进行一些文件写入(Uglifying),然后在重新启动时不要重复这样做。 - Max Yari
1
正确的写法是:NODE_ENV="production" forever start bin/www。之前我写错了,没有输入 start - Green

18

app.js:

console.log(process.env.IS_PROD);

使用 node(v0.8.21)
$ node app.js
undefined

$ IS_PROD=1 node app.js
1

$ sudo IS_PROD=1 node app.js
1

使用 forever (v0.10.0)
$ forever app.js
undefined

$ IS_PROD=1 forever app.js
1

$ sudo IS_PROD=1 forever app.js
1

文档

process.env

一个包含用户环境的对象。参见environ(7)。


这段代码应该在进程被 forever 杀死并重新启动后测试,并检查变量是否仍然存在。 - Ronan Quillevere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接