应用程序无法启动(端口8080)不可用

Don*_*ert 9 mongodb node.js openshift

我正在尝试将我的node.js应用程序(使用express和mongoose)部署到openshift,但我无法这样做.该应用程序在我的本地环境中完美运行.

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

我将此作为openshift的入口点,在package.json文件中使用此行(根据此主题):

"main": "bin/www",
Run Code Online (Sandbox Code Playgroud)

我确保根据指南使用环境变量设置我的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);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

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
Run Code Online (Sandbox Code Playgroud)

这是我的意思,因为我没有在任何地方指定端口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);
Run Code Online (Sandbox Code Playgroud)

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

[edit]我添加了一些日志来测试它运行的端口,但是日志语句永远不会运行.这是代码

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);
Run Code Online (Sandbox Code Playgroud)

和输出

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)
Run Code Online (Sandbox Code Playgroud)

TEST TEST TEST来自入口点文件开头的日志记录语句.在它碰到之前似乎有些东西失败了console.log("PORT: ", port);很可能这与app.jsMongoDb连接的位置有关.

[/编辑]

aes*_*ede 10

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

经过大量阅读后发现许多不同的用户针对相同的错误信息找到了不同的解决方案,包括我自己.所以我建议不要为这个错误寻找快速解决方案.最重要的步骤是以下列表中的第1步.

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

现在,只有知道"端口8080不可用"错误,我才能解决问题:

  1. ssh进入应用程序,转到app repo dir(cd $OPENSHIFT_REPO_DIR)并运行npm start
  2. 拿到 [...] Error: Cannot find module 'bcrypt' [...]
  3. 从ssh退出运行npm info bcrypt | grep "version:",它返回"0.8.5"
  4. 添加了条目"bcrypt":"~0.8.5"到我的package.json并提交/推送更改.
  5. 问题解决了,app运行!

  • 我试图弄清楚如何让第三方应用程序在我的实例上工作,ssh'd应用程序上的`npm start`推荐给了我修复我遇到的问题的工具.谢谢! (2认同)

Don*_*ert 10

该错误被证明是与端口无关的一般错误.显然,如果有任何致命的javascript错误,它会给出此消息.


cod*_*sed 5

我在这里详细提到了... 应用程序'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();
});
Run Code Online (Sandbox Code Playgroud)