Linux 应用程序';appname';无法在打开的班次节点应用程序上启动(端口8080不可用)
我在coffee中编写了一个节点restify服务器,但似乎无法运行它 部署时,我遇到以下错误: 正在等待应用程序端口(8080)变为可用 在此之后,我得到了以下错误 应用程序“appname”启动失败(端口8080不可用) 如果咖啡脚本似乎是一个问题,有一个工作围绕它。我不想改回js 我的服务器代码是:Linux 应用程序';appname';无法在打开的班次节点应用程序上启动(端口8080不可用),linux,node.js,coffeescript,openshift,restify,Linux,Node.js,Coffeescript,Openshift,Restify,我在coffee中编写了一个节点restify服务器,但似乎无法运行它 部署时,我遇到以下错误: 正在等待应用程序端口(8080)变为可用 在此之后,我得到了以下错误 应用程序“appname”启动失败(端口8080不可用) 如果咖啡脚本似乎是一个问题,有一个工作围绕它。我不想改回js 我的服务器代码是: restify = require 'restify' Bunyan = require 'bunyan' server = restify.createServer name: '
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
通过设置我的mongo db用户名和密码解决了此问题。原因有很多。如果nodejs没有正确启动,PaaS似乎在试图持续启动它。它要么为端口创建冲突,要么错误与问题本身无关。在我的例子中,缺少一个依赖项。
解决问题的最佳方法是在应用程序容器中使用ssh并查看日志文件:tail-f~/app root/logs/nodejs.log您需要检查的第一步是查看~/app root/logs/nodejs.log下的日志 就我而言,软件包或任何访问方式都没有问题。我在日志中得到的唯一信息是: 错误:在 服务器._listen2(net.js:1024:19) 如果除了前控制台显示无法访问8080之外,您找不到任何原因,请确保您已指定IP地址和端口号 我就是这样修好的
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\u LOG\u DIR
这里有Openshift环境存储的日志文件。我遇到了相同的错误,这与我在github上指向的分支有关
Master是我的主分支(第一个创建的分支),当我指出它是构建的,但如果我指向任何其他分支,我会得到错误。Openshift上的节点应用程序是一个两步过程:
process.env.OPENSHIFT_NODEJS_PORT
process.env.OPENSHIFT_NODEJS_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"
这是行不通的
希望这对某人有所帮助。rhc应用程序创建--从代码…
获取8080不可用?
正如Mihai在他的文章中解释的那样,(端口8080不可用)
不需要与您如何设置端口相关-因此,即使您正确使用进程.env.OPENSHIFT\u NODEJS\u端口
和进程.env.OPENSHIFT\u NODEJS\u IP
,也可能发生这种情况
查看~/app root/logs/nodejs.log
的建议很有帮助,但是如果错误发生在rhc app create上怎么办--从代码…
?应用程序将不会被创建,因此您无法使用ssh并查看nodejs.log
尝试在有限版本中推送应用程序-尽可能多地注释代码
对我来说,一开始只有快速应用程序初始化和监听才有效。然后,一旦创建了openshift应用程序,我就一点一点地取消对代码的注释,推送并检查nodejs.log
文件
通过这种方式,我发现我的mongoDb名称是“APPNAME”+process.env.NODE\u env
,而openshift创建的mongoDb数据库仅名为APPNAME
抱歉没有直接回答这个问题,但是8080不可用
似乎是由各种设置引起的,也许这会对某人有所帮助。如果您使用express:app.listen(process.env.OPENSHIFT\u NODEJS\u PORT,process.env.OPENSHIFT\u NODEJS\u IP)代码>
或:
解决此问题的最佳方法是检查日志文件夹。SSH到您的服务器,找到nodejs.log
文件,您可以使用cat nodejs.log
查看其内容
原因可能是:
- 其他文件中的语法错误
- 缺少端口环境变量
- 缺少IP环境变量(这两个变量最后在其他答案中说明)
尽管它说“端口8080不可用”,但错误可能存在于无法正确执行的文件中,因此您应该检查最近的更改,或者直接检查日志,找到错误所在。我们可以看到您用于启动http服务器的代码吗?我相信您无法指定要在openshift上使用的端口。尝试使用process.env.OPENSHIFT\u NODEJS\u PORT
作为您的端口。将端口和ip地址更改为以下内容,但仍显示上述错误server\u port=process.env.OPENSHIFT\u NODEJS\u port\12480 server\u ip\u address=process.env.OPENSHIFT\u NODEJS\u ip|124;'127.0.0.1'
@dmlittle我还尝试添加了节点包cloud env,这样我就可以config=require'cloud env'
并使用'server.listen config.port,config.ip,()->'但是仍然得到相同的错误您得到相同的错误这一事实告诉我,process.env.OPENSHIFT\u NODEJS\u PORT
没有定义,因此依赖8080。请尝试console.log process.env
检查openshift在哪里设置端口在app
上设置字段ip
为我解决了这个问题。感谢致电~/app root/logs/nodejs.log
。我没有想到错误日志可能会记录错误:-这是日志文件吗?我怎么找到它?这不起作用,有更新的答案,我也不能查看日志,它说目录不存在这对我有帮助。罗
mongo_url = "mongodb://admin:pass@$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/mydbname"
var port = process.env.OPENSHIFT_NODEJS_PORT;
var ip = process.env.OPENSHIFT_NODEJS_IP;
app.listen(port, ip);