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

Posted

技术标签:

【中文标题】应用程序“appname”无法在打开的班次节点应用程序上启动(端口 8080 不可用)【英文标题】:Application 'appname' failed to start (port 8080 not available) on open shift node app 【发布时间】:2015-09-30 06:41:07 【问题描述】:

我在咖啡中编写了一个节点 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

【问题讨论】:

我们能看到您用来启动 http 服务器的代码吗? 我相信您无法指定要在 openshift 上使用的端口。尝试使用process.env.OPENSHIFT_NODEJS_PORT 作为您的端口。 将端口和ip地址更改为以下但仍然显示上述错误。 server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080 server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' @dmlittle 我也尝试添加节点包 cloud-env 所以我可以config = require 'cloud-env' 并使用`server.listen config.PORT, config.IP, ()->' 但仍然得到同样的错误 您遇到相同错误的事实告诉我,process.env.OPENSHIFT_NODEJS_PORT 未定义,因此依赖于 8080。尝试console.log process.env 检查 openshift 设置端口的位置 【参考方案1】:

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

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

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

如果除了前控制台说它无法访问 8080 之外找不到任何原因,请确保您已指定 IP ADDRESS 和 PORT Number。

这就是我修复它的方法。

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 将无法启动您的应用程序。

更新:

如何进入日志目录:

    使用命令 rhc ssh SSH 到您的设备 登录后输入cd $OPENSHIFT_LOG_DIR

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

【讨论】:

app 上设置字段ip 为我解决了这个问题。谢谢 请致电~/app-root/logs/nodejs.log。我没有想到错误日志可能会记录错误。 :-p 这个日志文件在哪里?我如何找到它? 这不起作用,有更新的答案,我也无法查看日志,它说目录不存在【参考方案2】:

这可能有多种原因。如果 nodejs 没有正确启动,PaaS 似乎正在尝试不断地启动它。它要么为端口创建冲突,要么错误与问题本身无关。就我而言,缺少依赖项。 解决问题的最佳方法是在应用容器中 ssh 并查看日志文件:tail -f ~/app-root/logs/nodejs.log

【讨论】:

这对我有帮助。日志准确地告诉我出了什么问题。谢谢! +1 也包含用于查看日志的 *nix 命令【参考方案3】:

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

【讨论】:

你在哪里做的?【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

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

    "scripts": 
    "start": "node server.js"
    ,
    "main": "server.js"
    

    使用OPENSHIFT环境变量获取IP和PORT:

    process.env.OPENSHIFT_NODEJS_PORT
    process.env.OPENSHIFT_NODEJS_IP
    

更多详情请查看: OpenShift: "Failed to execute control start" on node application

【讨论】:

【参考方案6】:

rhc app create ... --from-code ... 得到 8080 不可用?

.

就像 Mihai 在他的 answer 中解释的那样,(port 8080 not available) 不需要与您如何设置端口相关 - 因此即使您正确使用 process.env.OPENSHIFT_NODEJS_PORTprocess.env.OPENSHIFT_NODEJS_IP 也可能发生这种情况.

查看~/app-root/logs/nodejs.log 的建议很有帮助,但如果rhc app create ... --from-code ... 发生错误怎么办?该应用程序不会被创建,因此您不能 ssh 并查看 nodejs.log

尝试以有限版本推送您的应用 - 尽可能多地注释掉代码。

对我来说,它只从 express 应用程序的初始化和监听开始。然后,一旦我创建了 openshift 应用程序,我就会一点一点地取消注释代码,推送并检查 nodejs.log 文件。

这样我发现我的 mongoDb 名称是 "APPNAME_"+process.env.NODE_ENV,而 openshift 创建的 mongoDb 数据库只调用了 APPNAME

.

抱歉没有直接回答问题,但8080 not available似乎是由各种设置引起的,也许这会对某人有所帮助。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

to mongoose uri。我正在尝试关注但

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

这不起作用。

希望这对某人有所帮助。

【讨论】:

【参考方案9】:

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

原因可能是:

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

即使它说“端口 8080 不可用”,错误也可能在无法正确执行的文件中,因此您应该检查最近的更改或直接查看日志并找到错误所在。

【讨论】:

以上是关于应用程序“appname”无法在打开的班次节点应用程序上启动(端口 8080 不可用)的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 错误“无法安装应用程序 ... [appname].app 需要 [devicename] 不支持的“z”功能

xcode 12:无法打开文件“app name”,因为您无权查看它

由于配置文件不活动,Testflight 错误无法安装 <appname> WWDR 错误

警报中缺少 URL 方案应用程序名称:在“”中打开此页面

应用被拒绝,健康应用权限

我无法在物理设备上从 Xcode 安装和运行应用程序