打开class次时无法让NODE_ENV粘贴在我的MEAN堆栈上

我有:

  • 添加了export NODE_ENV = production到app-root / data / .bashprofile(和echo $ NODE_ENV显示生产)
  • 试过rhc set-env NODE_ENV =生产-a myapp生成设置环境variables(s)…服务器返回了一个意外的错误代码:501
  • 在我的本地仓库中创build了一个.openshift / action_hooks目录,并添加了行export NODE_ENV = production到一个开始和一个pre_start文件,提交并推送到openshift
  • 尝试了.openshift / action_hooks / pre_start_ *以及
  • 在我的server.js文件的开头声明了一个根variables(如下面的@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')总是返回'开发'和process.env.NODE_ENV根本不打印(空值)

有没有人有任何想法,为什么这不工作?

UPDATE

我创build了一个简约的节点服务器,仍然无法获得任何envvariables在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); 

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

您应该可以通过在项目源文件夹中运行以下内容来进行故障诊断(将-a YOUR_APP_NAME添加到每个命令的末尾以在其他位置运行):

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

    rhc env列表

  2. 如果您列出了NODE_ENV ,请清除它:

    rhc unset NODE_ENV

  3. 将您的NODE_ENV设置为“生产”:

    rhc env set NODE_ENV =“生产”

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

    rhc ssh

    env | grep NODE_ENV

运行rhc help env提供了很多很好的使用信息。 根据它们的写法,有些服务器需要重新加载才能获取新的内容。

我认为在OpenShift上搭buildMEANStack最简单的方法就是使用Yeoman的Angular-fullstack生成器 。 它应该为你自动configuration你的环境。

该闭包不能访问该过程对象。 上面那个试试

 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_ENV Express.js将默认app.get('env') development

更新:

对不起,错过了OpenShift部分:/

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

看起来像OpenShift中的环境variables需要进入:

.openshift / action_hooks /编译

使用export 。 你尝试过吗?