【发布时间】:2015-03-19 20:53:11
【问题描述】:
我正在尝试让 NodeJS 在 OpenShift 上运行,但无论如何都会遇到同样的问题。这是一个例子:
更新详情
第一:
这段代码直接从 Cloud9 中运行良好
var port = process.env.PORT || "127.0.0.1";
var ipaddress = process.env.IP || 8080;
console.log("Getting started here!");
var http = require('http');
var server = http.createServer(function(request, response) {
console.log((new Date()) + ' Received request for ' + request.url);
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write("Welcome to Node.js on OpenShift!\n\n");
response.end("Thanks for visiting us!!!! \n");
});
server.listen( port, ipaddress, function() {
console.log((new Date()) + ' Server is listening on port 8080');
});
console.log("Listening to " + ipaddress + ":" + port + "...");
但是,一旦我将其推送到我的 OpenShift 帐户,将端口和 ipaddress 变量更改为:
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1";
var port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
...当我通过 SSH 连接时,我在 OpenShift VM 上得到了这个,更改为 app-root/runtime/repo 并运行 node server.js:
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1129:5)
这表明该端口已经在使用中,对吗?我将端口更改为 15550,正如我在 stackoverflow 上的某处所读到的那样,我假设特定的端口范围不直接可用 - 只能通过端口转发。 你猜怎么着,我只是得到一个不同的错误(EACCES)。
以下是在我的 OpenShift 虚拟机上运行的进程(就我的帐户所见而言):
PID TTY STAT TIME COMMAND
177800 ? S 0:00 sshd: XXXX@pts/1
177801 pts/1 Ss 0:00 /bin/bash --init-file /usr/bin/rhcsh -i
210176 pts/1 R+ 0:00 ps ax
第二:
我想知道如何减少构建过程?当我将代码推送到 OpenShift 时,这就是我得到的:
remote: /bin/sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: Stopping NodeJS cartridge
remote: Wed Mar 18 2015 07:27:49 GMT-0400 (EDT): Stopping application 'nodejs' ...
remote: Wed Mar 18 2015 07:27:50 GMT-0400 (EDT): Stopped Node application 'nodejs'
remote: /bin/sh: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (C.UTF-8)
remote: Saving away previously installed Node modules
remote: Building git ref 'master', commit e8239d1
remote: Building NodeJS cartridge
整个过程大约需要 10 秒或更长时间。我不确定幕后到底发生了什么,但似乎很多。
所以我的第二个问题是,有没有办法缩短构建时间? 我尝试在 .opengit/markers 目录中创建一个空文件,正如我在某处读到的那样,但它并没有帮助改进任何东西。
感谢您的帮助! z4c
【问题讨论】:
-
您是否将其创建为 nodejs 应用程序类型?还是您在使用 DIY 墨盒?您是否通过 git push 部署代码?
-
是的,我按照教程准确描述了 OpenShift 上的点点滴滴,并且还提到了 NodeJS 类型。不过,似乎 NodeJS 也被封装在墨盒中。部署确实是通过 Git Push。
-
嗨乔纳森, ps -ax 没有显示任何其他运行。在没有支持的情况下,我如何检查自己在哪个端口上运行了什么?由于缺少权限,netstat 不返回任何内容。
-
P.S.:我检查了 OpenShift VM,env 变量存在并设置为 8080。
-
试试 console.log() process.env.OPENSHIFT_NODEJS_IP 和 process.env.OPENSHIFT_NODEJS_PORT 看看它们是什么