应用程序“appname”未能在开放移动节点应用程序上启动(端口8080不可用)

我已经写了一个节点在咖啡服务器,我似乎无法得到它运行。

部署时出现以下错误:

正在等待应用程序端口(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 

Solutions Collecting From Web of "应用程序“appname”未能在开放移动节点应用程序上启动(端口8080不可用)"

您需要检查的第一步是查看〜/ app-root / logs / nodejs.log下的日志

在我的情况下,没有包或任何类型的访问问题。 我在日志中得到的唯一信息是:

错误:在server._listen2(net.js:1024:19)errnoException(net.js:905:11)处侦听EACCES

如果除了前端控制台找不到任何理由说它无法访问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无法启动您的应用程序。

更新:

如何进入日志目录:

  1. 使用命令rhc ssh将SSH加入你的设备
  2. 一旦你登录,输入cd $OPENSHIFT_LOG_DIR

在那里你有由Openshift环境存储的日志文件。

这可能是由于许多原因。 如果nodejs启动不正确,PaaS似乎试图连续启动它。 它或者为端口创建一个冲突,或者这个错误与问题本身无关。 在我的情况下,有一个依赖失踪。 解决问题的最好方法是在应用程序容器中ssh并观察日志文件:tail -f〜/ app-root / logs / nodejs.log

通过设置我的mongo db用户名和密码解决了这个问题

我得到了同样的错误,这与我在github上指向的分支有关。

师父是我的主要分支(第一个创建),当我指出它建立了,但我会得到错误,如果我指向任何其他分支。

在Openshift上的节点应用程序是一个2步骤的过程:

  1. 在package.json中创建条目以启动服务器(入口点到应用程序):

     "scripts": { "start": "node server.js" }, "main": "server.js" 
  2. 使用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_PORTprocess.env.OPENSHIFT_NODEJS_IP ,也可能发生这种情况process.env.OPENSHIFT_NODEJS_IP正确。

一个建议,看看~/app-root/logs/nodejs.log正在帮助很多,但是如果错误发生在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; 

呃,我正在尝试跟随但是

 mongo_url = "mongodb://admin:pass@$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/mydbname" 

这不起作用。

希望这有助于某人。

解决这个问题的最好方法是检查你的日志文件夹。 SSH到你的服务器,找到nodejs.log文件,你可以使用cat nodejs.log来查看它的内容。

原因可能是:

  • 其他文件中的语法错误
  • 缺少端口环境变量
  • 缺少IP环境变量(这2个最后在其他答案中陈述)

即使它说“端口8080不可用”,错误可能是在一个文件,不能正确执行,因此,你应该检查最近的变化,或者直接检查日志,找到错误的位置。