[英]Application 'appname' failed to start (port 8080 not available) on open shift node app
我用咖啡写了一个节点restify服务器,我似乎无法让它运行。
部署时我收到以下错误:
等待应用程序端口(8080)变得可用...
之后我得到以下错误
应用程序'appname'无法启动(端口8080不可用)
如果coffeescript似乎是问题,那就有一个解决方法。 我不想改回js。
我的服务器代码是:
restify = require 'restify'
Bunyan = require 'bunyan'
server = restify.createServer
name: 'APPNAME'
version: '0.0.1'
log: Bunyan.createLogger
name: 'api'
serializers:
req: ()->
return "bad"
# Usercontroller.access calls a function to process the request
server.post '/user/access', UserController.access
server = create.createServer()
server.listen server_port, ->
console.log "Http server listening on #{server_port}"
require('./document')(server.router.mounts, 'restify')
return
您需要检查的第一步是查看〜/ app-root / logs / nodejs.log下的日志
在我的情况下,包或任何类型的访问都没有问题。 我在日志中获得的唯一信息是:
错误:在Server._listen2(net.js:1024:19)的errnoException(net.js:905:11)中侦听EACCES
如果除了前控制台之外找不到任何理由说它无法访问8080,请确保已指定IP地址和PORT编号。
这就是我修复它的方法。
var express = require('express');
var app = express();
var http = require('http');
app.set('port', process.env.OPENSHIFT_NODEJS_PORT || process.env.PORT || 3002);
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 at %s:%d ", app.get('ip'),app.get('port'));
server();
});
如上所述,app.get('ip')在收听时非常重要。 否则,openshift无法启动您的应用程序。
更新:
如何进入日志目录:
cd $OPENSHIFT_LOG_DIR
你有Openshift环境存储的日志文件。
这可能有很多原因。 如果nodejs没有正确启动,PaaS似乎试图不断启动它。 它要么为端口创建冲突,要么错误与问题本身无关。 在我的情况下,缺少一个依赖。 解决问题的最佳方法是在应用程序容器中ssh并观察日志文件:tail -f~ / app-root / logs / nodejs.log
通过设置我的mongo db用户名和密码解决了这个问题
我得到了同样的错误,它与我在github上指向的分支有关。
Master是我的主要分支(第一个创建),当我指出它构建但如果我指向任何其他分支我会得到错误。
Openshift上的Node App是一个两步过程:
在package.json中创建条目以了解如何启动服务器(应用程序的入口点):
"scripts": { "start": "node server.js" }, "main": "server.js"
使用OPENSHIFT环境变量获取IP和PORT:
process.env.OPENSHIFT_NODEJS_PORT process.env.OPENSHIFT_NODEJS_IP
有关更多详细信息,请检查: OpenShift:节点应用程序上的“无法执行控制启动”
rhc app create ... --from-code ...
并且8080不可用? 。
就像Mihai在他的回答中解释的那样(port 8080 not available)
不需要与您设置端口的方式相关 - 因此即使您使用process.env.OPENSHIFT_NODEJS_PORT
和process.env.OPENSHIFT_NODEJS_IP
也可能发生这种情况process.env.OPENSHIFT_NODEJS_IP
正确。
看看~/app-root/logs/nodejs.log
的建议有很多帮助但是如果在rhc app create ... --from-code ...
上发生错误rhc app create ... --from-code ...
? 该应用程序将无法创建,因此您无法ssh并查看nodejs.log
。
尝试在限定版本中推送您的应用程序 - 尽可能多地注释掉代码。
对我而言,它只是从快速应用初始化和聆听开始。 然后,一旦我创建了openshift应用程序,我就一点一点地取消注释代码,推送并检查nodejs.log
文件。
这样我发现我的mongoDb名称是"APPNAME_"+process.env.NODE_ENV
而openshift创建的mongoDb数据库只调用APPNAME
。
抱歉没有直接回答这个问题,但8080 not available
似乎是由各种设置造成的,也许这会对某人有所帮助。
如果您使用express: app.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);
要么:
var port = process.env.OPENSHIFT_NODEJS_PORT;
var ip = process.env.OPENSHIFT_NODEJS_IP;
app.listen(port, ip);
在我的情况下,我正在使用rhc ssh
检查以下错误,如上所述。
Unhandled rejection Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer [as oncomplete] (dns.js:124:16)
我通过设置来摆脱我的问题
mongo_url = process.env.OPENSHIFT_MONGODB_DB_URL;
到了猫鼬uri。我正在努力追随但是
mongo_url = "mongodb://admin:pass@$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/mydbname"
这不起作用。
希望这有助于某人。
解决它的最佳方法是检查日志文件夹。 SSH到您的服务器,找到nodejs.log
文件,您可以使用cat nodejs.log
来查看其内容。
原因可能是:
即使它显示“端口8080不可用”,但错误可能在无法正确执行的文件中,因此您应检查最近的更改,或者直接检查日志并找到错误的位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.