我正在研究nodejs app,我写了服务器监听代码,然后我将代码部署到openshift托管中,我得到503响应,在本地如果我运行此代码它正常工作。
代码:
var http = require('http');
var express = require('express');
var fs = require('fs');
var app = express();
app.set('port', process.env.OPENSHIFT_NODEJS_PORT || 8080);
app.set('ip', process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1');
http.createServer(app).listen(app.get('port'), app.get('ip'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
app.get('/', function (req, res) {
res.send('Hello World!');
});
答案 0 :(得分:2)
你传递了OPENSHIFT_NODEJS_IP
变量吗?
通常问题是nodejs应用程序正在监听IP 127.0.0.1
,就像在这种情况下一样,但应该在0.0.0.0
上。
如果这没有帮助,请提供有关如何在OpenShift中创建应用程序的更多详细信息。
答案 1 :(得分:1)
以下是一些可能有助于确定问题的技巧。我接近它的第一种方法是将ssh插入OpenShift盒式磁带。假设您的应用程序的名称是hello_world:
rhc ssh -a hello_world
进入后,输入:
lsof -i | grep node
这应列出正在运行的节点进程以及每个正在侦听的ips和端口。我有两个节点应用程序正在运行,所以我的输出如下所示:
node 23028 3389 11u IPv4 518408054 0t0 TCP 127.6.158.129:8097 (LISTEN)
node 23028 3389 12u IPv4 518408056 0t0 TCP 127.6.158.129:8080 (LISTEN)
因此我的节点应用程序正在侦听除localhost之外的实际IP地址。我的猜测是你会看到这种效果:
node 23028 3389 11u IPv4 518408054 0t0 TCP 127.0.0.1:8080 (LISTEN)
接下来,检查您的环境:
env | grep OPENSHIFT_NODEJS
我的样子如下:
OPENSHIFT_NODEJS_PORT=8080
OPENSHIFT_NODEJS_IP=127.6.158.129
所以我可以看到OPENSHIFT_NODEJS_PORT和OPENSHIFT_NODEJS_IP匹配上面我的lsof语句的输出,所以我都很好。
我确信在完成所有这些之后你会发现一个差异,这将是你的线索。