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
):

  • 检查您当前的应用程序令牌列表:

    rhc环境列表

  • 如果为
    节点_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上是否发生了什么。不过,非常感谢!