【发布时间】:2012-03-12 21:47:48
【问题描述】:
我正在使用 npm 包 express 版本 2.5.2 和节点版本 .0.6.5。我似乎在 Debian 4.4.5 上运行 bash 版本 4.1.5。
我正在尝试在生产模式下运行我的服务器,但它仍在开发模式下运行。
我在我的 bash shell 中运行这些命令:
$ export NODE_ENV=production
$ echo $NODE_ENV
production
$ sudo echo $NODE_ENV
production
$ sudo node bootstrap.js
我在 bootstrap.js 中有这段代码:
var bootstrap_app = module.exports = express.createServer();
//...
console.log(bootstrap_app.settings.env);
这是我看到的标准输出:
development
这是我的使用问题还是我的系统问题?
编辑: 感谢 ThiefMaster 正确地识别出这个问题源于我以 root 身份运行的节点。 ThiefMaster 建议使用 iptables 从端口 80 转发到非特权端口,但我的系统给了我一个错误。将此讨论移至 superuser.com 或 serverfault.com(链接至关注)
【问题讨论】:
-
出于安全原因,在使用 sudo 时,大多数环境变量都未设置。因此,如果不修改 sudoers 文件以允许该变量通过,则无法将该环境变量传递给节点。但是,无论如何,您都不应该以 root 身份运行节点。如果您只需要 80 端口,请在非特权端口上运行节点并设置 iptables 转发以将端口 80 映射到该端口。
-
感谢您的建议!我运行了一个非端口 80 应用程序,它正确地将环境识别为生产环境!您应该将此作为答案发布-我会接受。再次感谢!
-
我刚刚尝试安装和使用 iptables (iptables -t -nat L) 并收到错误“iptables v1.4.8: can't initialize iptables table `nat': Permission denied (you must be root ) 也许 iptables 或您的内核需要升级。” Debian 4.4 是一个相当老的版本,对吧? /proc/version 说“Linux 版本 3.1.9-vs2.3.2.5”
-
我做到了。有人认为它应该转换为评论。而且您只能将 iptables 转发设置为 root。再次发布答案。
-
顺便说一句,
sudo echo $NODE_ENV有效,因为变量已被替换,所以 sudo 看到的是echo "production"
标签: node.js environment-variables development-environment express production-environment