打开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
添加到每个命令的末尾以在其他位置运行):
-
检查您当前的应用程序令牌列表:
rhc env列表
-
如果您列出了
NODE_ENV
,请清除它:rhc unset NODE_ENV
-
将您的
NODE_ENV
设置为“生产”:rhc env set NODE_ENV =“生产”
-
通过重新加载服务器,运行
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
。 你尝试过吗?