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

我试图部署我的node.js应用程序(与快递和mongoose)openshift,我不能这样做。 该应用程序完美地工作在我的本地环境。

我的入口点是文件/ bin / www

我在package.json文件(通过这个线程 )中将这个行设置为openshift的入口点:

"main": "bin/www", 

我已经确定使用环境variables设置我的mongodb连接根据指南,如下所示:

 // default to a localhost configuration: var mongoConnectionString = 'mongodb://127.0.0.1/code-blog'; // if OPENSHIFT env variables are present, use the available connection info: if (process.env.OPENSHIFT_MONGODB_DB_PASSWORD) { mongoConnectionString = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" + process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + process.env.OPENSHIFT_MONGODB_DB_HOST + ':' + process.env.OPENSHIFT_MONGODB_DB_PORT + '/' + process.env.OPENSHIFT_APP_NAME; } mongoose.connect(mongoConnectionString); 

我得到的错误是:

 remote: Waiting for application port (8080) become available ... remote: Application 'codeblog' failed to start (port 8080 not available) remote: ------------------------- remote: Git Post-Receive Result: failure remote: Activation status: failure remote: Activation failed for the following gears: remote: 558a25bd5973ca7a74000162 (Error activating gear: CLIENT_ERROR: Failed to execute: 'control start' for /var/lib/openshift/558a25bd5973ca7a74000162/nodejs remote: #<IO:0x00000000b49380> remote: #<IO:0x00000000b49308> remote: ) remote: Deployment completed with status: failure remote: postreceive failed To ssh://558a25bd5973ca7a74000162@codeblog-donaldsubert.rhcloud.com/~/git/codebl og.git/ 29635a8..7a0e926 master -> master 

这对我来说很有意思,因为我没有在任何地方指定端口8080。 实际上,默认的端口是在这里指定的:

 var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || "3000"); var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; app.set('port', port); var server = http.createServer(app); 

我不确定从哪里去。 我似乎没有足够的信息来确定我的下一步。

我添加了一些日志logging来testing这个运行的端口,但是日志语句永远不会运行。 这是代码

 console.log("TEST TEST TEST"); var app = require('../app'); var debug = require('debug')('ProjectTemplate:server'); var http = require('http'); var port = normalizePort(process.env.OPENSHIFT_NODEJS_PORT || "3000"); var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; console.log("PORT: ", port); 

并输出

 TEST TEST TEST module.js:340 throw err; ^ Error: Cannot find module './routes/logIn' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/var/lib/openshift/558a25bd5973ca7a74000162/app-root/ runtime/repo/app.js:26:13) 

TEST TEST TEST来自入口点文件开始处的日志语句。 在命中console.log("PORT: ", port);之前似乎失败了console.log("PORT: ", port); 这可能是与app.js做MongoDb连接的地方。

[/编辑]

错误原来是一个通用的错误,与端口没有任何关系。 显然,如果有任何致命的javascript错误,它会给出这个消息。

有完全相同的错误消息: Application 'appname' failed to start (port 8080 not available) on open shift node app

经过大量的阅读发现,许多不同的用户来到相同的错误消息,包括我自己的不同的解决scheme。 所以我build议不要为这个错误寻找快速解决scheme。 最重要的一步是下面的列表中的第一步。

我的解决scheme是在package.json中添加一个缺失的依赖项,对于我的特殊情况,我需要添加"bcrypt":"~0.8.5" ,这样一个愚蠢的东西!

现在,我怎么才知道“端口8080不可用”的错误来解决这个问题:

  1. ssh进入应用程序,去应用程序回购目录( cd $OPENSHIFT_REPO_DIR ),然后运行npm start
  2. [...] Error: Cannot find module 'bcrypt' [...]
  3. 从ssh注销,运行npm info bcrypt | grep "version:" npm info bcrypt | grep "version:" ,它返回“0.8.5”
  4. 添加了“bcrypt”条目:“〜0.8.5”到我的package.json和提交/推送更改。
  5. 问题解决了,app运行!

我已经在这里详细提到… 应用程序“appname”未能启动(端口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(); }); 

我不认为这行会在指定的端口上创build服务器

 var server = http.createServer(app); 

您将需要告诉它听如此这样的端口:

 server.listen(port); 

当您的应用程序正在侦听正确的端口时,缺less的是您不指定要侦听的IP地址。 添加如下所示的app.set('port',port);

 app.set('ipaddr', server_ip_address); 

对我来说,这是连接string。 在创buildmongodb磁带盒后build议使用的是不工作: Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/'nodejs'

但从这篇文章 ,通过使用OPENSHIFT_MONGODB_DB_URLvariables它的工作。

 if(process.env.OPENSHIFT_MONGODB_DB_URL){ mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + db_name; 

}