我正在使用npm包express版本2.5.2和节点版本.0.6.5。我似乎在Debian 4.4.5上运行bash 4.1.5版。如何通过sudo在生产模式下运行node.js Express?
我试图在生产模式下运行我的服务器,但它仍然以开发模式运行。
我在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为他正确地确定此问题源于我的运行节点作为根。 ThiefMaster建议使用iptables从端口80转发到非特权端口,但是我的系统给我一个错误。将此讨论移至superuser.com或serverfault.com(要关注链接)
当出于安全原因使用sudo时,大多数环境变量未设置。因此,如果不修改sudoers文件以允许该变量通过,则无法将该环境变量传递给节点。但是,无论如何,您都不应该以root身份运行节点。如果您只需要它用于端口80,请在非特权端口上运行节点,并设置iptables forward以将端口80映射到该端口。 – ThiefMaster 2012-02-22 14:45:56
感谢您的建议! 我运行了一个非端口80应用程序,它正确地将环境识别为生产环境! 你应该发布这个答案 - 我会接受它。 再次感谢! – Aaron 2012-02-22 15:01:22
我只是试图安装和使用iptables(iptables -t -nat L)并得到错误“iptables v1.4.8:无法初始化iptables表nat':权限被拒绝(您必须是root) 也许iptables或者你的内核需要升级。“ Debian 4.4是一个相当老的版本,对吧?/ proc/version说”Linux version 3.1.9-vs2.3.2.5“ – Aaron 2012-02-22 15:07:41