在开放班次时无法让NODE_ENV粘在我的MEAN堆栈上

时间:2014-05-01 09:00:13

标签: node.js openshift

我有:

  • 导出NODE_ENV =生产添加到app-root / data / .bashprofile(并且echo $ NODE_ENV显示生产)
  • 尝试 rhc set-env NODE_ENV = production -a myapp 生成设置环境变量...服务器返回意外错误代码:501
  • 在我的本地仓库中创建了一个.openshift / action_hooks目录,并将行导出NODE_ENV = production添加到start和pre_start文件中,已提交并推送到openshift
  • 尝试过.openshift / action_hooks / pre_start_ *以及
  • 在我的 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(null值)

有没有人知道为什么这不起作用?

更新

我创建了一个简约节点服务器,仍然无法使任何env变量在开放班次上工作:

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

3 个答案:

答案 0 :(得分:3)

我无法重现此问题。我认为您最初收到的 501错误响应是造成问题的原因。

您应该可以通过在项目源文件夹中从内部运行以下内容来解决问题(将-a YOUR_APP_NAME添加到每个命令的末尾以便在其他位置运行):

  1. 检查您当前的申请代币清单:

    rhc env list

  2. 如果您列出了NODE_ENV的内容,请将其清除:

    rhc unset NODE_ENV

  3. NODE_ENV设置为“生产”:

    rhc env set NODE_ENV =“production”

  4. 通过重新加载服务器,运行rhc env list或通过SSH连接到应用程序以直接检查系统环境来验证是否已设置该值:

    rhc ssh

    env | grep NODE_ENV

  5. 运行rhc help env也提供了很多良好的使用信息。根据它们的编写方式,需要重新加载一些服务器才能获取新内容。

    我认为在OpenShift上使用MEANStack启动和运行的最简单方法是使用Yeoman's Angular-fullstack generator。它应该自动为您配置环境。

答案 1 :(得分:0)

该闭包无法访问进程对象。在上面尝试

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
        });
    });

答案 2 :(得分:0)

运行应用时,请尝试以下操作:

NODE_ENV=production npm start

以您启动应用的任何方式替换npm startnode server或其他)。

当我在当地工作时,这就是我改变环境的方式。因为我通常希望它是development

如果app.get('env')未设置,Express.js会将development默认为process.env.NODE_ENV

更新

抱歉,错过了OpenShift部分:/

https://www.openshift.com/developers/openshift-environment-variables

看起来OpenShift中的环境变量需要进入:

.openshift / action_hooks /构建

使用export。你试过了吗?