应用程序' appname'无法在打开班次节点应用程序上启动(端口8080不可用)

时间:2015-07-11 15:57:26

标签: linux node.js coffeescript openshift restify

我已经用咖啡写了一个节点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

9 个答案:

答案 0 :(得分:29)

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

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

  

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

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

更新:

如何进入日志目录:

  1. 使用命令rhc ssh
  2. 将SSH连接到您的设备
  3. 登录后,请键入cd $OPENSHIFT_LOG_DIR
  4. 您有Openshift环境存储的日志文件。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

通过设置我的mongo db用户名和密码

解决了这个问题

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

Openshift上的Node App是一个两步过程:

  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
    
  3. 详情请查看: OpenShift: "Failed to execute control start" on node application

答案 5 :(得分:1)

rhc app create ... --from-code ...并且8080不可用?

就像Mihai在他的answer中解释的那样(port 8080 not available)不需要与你如何设置你的端口有关 - 因此即使你使用process.env.OPENSHIFT_NODEJS_PORT也可能会发生这种情况。 }和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似乎是由各种设置引起的,也许这会对某人有所帮助。

答案 6 :(得分:1)

如果您使用快递: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);

答案 7 :(得分:0)

在我的情况下,我使用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;

到mongoose uri。我正在尝试跟随但是

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

这不起作用。

希望这有助于某人。

答案 8 :(得分:0)

解决问题的最佳方法是检查日志文件夹。 SSH到您的服务器,找到nodejs.log文件,您可以使用cat nodejs.log查看其内容。

原因可能是:

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

即使它显示“端口8080不可用”,但错误可能是在无法正确执行的文件中,因此您应该检查最近的更改,或者直接检查日志并找到错误的位置。< / p>