Node.js Can';不要让NODE_ENV在open shift上停留在我的平均堆栈上
我有:Node.js Can';不要让NODE_ENV在open shift上停留在我的平均堆栈上,node.js,openshift,Node.js,Openshift,我有: 将导出节点_ENV=production添加到app root/data/.bashprofile(echo$NODE_ENV显示生产) 已尝试rhc set env NODE_env=production-生成设置环境变量的myapp。。。服务器返回意外错误代码:501 在本地repo中创建了一个.openshift/action\u hooks目录,并将行导出节点\u ENV=production添加到start和pre\u start文件中,提交并推送到openshift 也尝试
- 将导出节点_ENV=production添加到app root/data/.bashprofile(echo$NODE_ENV显示生产)
- 已尝试rhc set env NODE_env=production-生成设置环境变量的myapp。。。服务器返回意外错误代码:501
- 在本地repo中创建了一个.openshift/action\u hooks目录,并将行导出节点\u ENV=production添加到start和pre\u start文件中,提交并推送到openshift
- 也尝试了.openshift/action\u hooks/pre\u start\ux
- 在我的server.js文件的开头声明了一个根变量(如下@JuJoDi所示),现在看起来如下:
var express = require('express'), routes = require('./routes'), api = require('./routes/api'), http = require('http'), path = require('path'), everyauth = require('everyauth'), connect = require('connect'), env = process.env.NODE_ENV ? process.env.NODE_ENV : "process.env.NODE_ENV is null";
app.get('/version', function(req,res){
res.json({
"app.get('env')" : app.get('env'),
"process.env.NODE_ENV" : process.env.NODE_ENV,
"Global env" : env
});
});
实际情况是app.get('env')总是返回“development”,process.env.NODE_env根本不打印(空值)
有人知道为什么这不起作用吗
更新
我创建了一个最低限度的节点服务器,但仍然无法在open shift上使用任何环境变量:
var http = require('http');
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || process.env.OPENSHIFT_INTERNAL_IP || 'localhost';
var env = process.env.NODE_ENV
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('' + process.env.NODE_ENV + "|" + env);
}).listen(port, ipaddress);
该闭包无权访问流程对象。除此之外,尝试
var env = process.env.NODE_ENV;
然后用
app.get('/version', function(req,res){
res.json({
"app.get('env')" : app.get('env'),
"process.env.NODE_ENV" : env
});
});
运行应用程序时,请尝试以下操作:
NODE_ENV=production npm start
用启动应用程序的任何方式(node server
或任何方式)替代npm start
这就是我在当地工作时改变环境的方式。因为我通常希望它是development
如果未设置process.env.NODE\u env
,Express.js将默认app.get('env')
为development
更新:
抱歉,缺少OpenShift部分:/
看起来OpenShift中的环境变量需要输入:
.openshift/action\u hooks/build
使用
导出
。你试过了吗?我无法重现这个问题。我认为您最初收到的501错误响应是您出现问题的原因
您应该能够通过在项目源文件夹中运行以下命令来进行故障排除(在要在其他地方运行的每个命令末尾添加-a your_APP_NAME
):
节点_ENV
列出了某些内容,请将其清除:
rhc未设置节点\u环境节点\u ENV
设置为“生产”:
rhc环境集节点_env=“生产”rhc env list
或通过SSH连接到应用程序以直接检查系统环境,验证是否已设置该值:
rhc-ssh
环境|绿色节点|环境rhc help env
也提供了大量良好的使用信息。根据它们的编写方式,一些服务器需要重新加载才能获取新内容
我认为在OpenShift上启动并运行MEANStack最简单的方法是使用。它会自动为您配置环境。谢谢您的帮助。我试过你的主意,但还是不行。在我的本地node.js服务器上,闭包甚至在该范围内也可以访问该进程。有趣的是,我刚刚在我的服务器上测试了它,但它肯定没有。这是一种
var self=这种情况。您正在运行哪个版本的节点?我正在运行node.js v0.10.12如果您使用node\u ENV=production node server.js启动服务器会发生什么情况?它工作得很好。但我相信我不能在openshift上这么做?谢谢你,约翰尼,这在我的本地机器上非常有效。实际上,我在本地使用OpenShift环境没有问题。在openshift上部署时,我根本无法使用任何自定义环境变量。很高兴在FreeNode IRC上的#openshift中帮助解决问题。今天,当我再次讨论这个问题并遵循您的示例时,它工作得非常好。我不知道我是否改变了什么,或者openshift上是否发生了什么。不过,非常感谢!