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

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: '

我在coffee中编写了一个节点restify服务器,但似乎无法运行它

部署时,我遇到以下错误:

正在等待应用程序端口(8080)变为可用

在此之后,我得到了以下错误

应用程序“appname”启动失败(端口8080不可用)

如果咖啡脚本似乎是一个问题,有一个工作围绕它。我不想改回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

通过设置我的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将无法启动您的应用程序

更新:

如何进入日志目录:

  • 使用命令rhcsh将SSH安装到您的设备中
  • 登录后,键入
    cd$OPENSHIFT\u LOG\u DIR

  • 这里有Openshift环境存储的日志文件。

    我遇到了相同的错误,这与我在github上指向的分支有关


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

    Openshift上的节点应用程序是一个两步过程:

  • 在package.json中创建如何启动服务器的条目(应用程序的入口点):

  • 使用OPENSHIFT环境变量获取IP和端口:

    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);