2015-07-20 73 views
8

我试图将我的node.js应用程序(使用express和mongoose)部署到openshift,我无法这样做。该应用程序完美适用于我的本地环境。应用程序启动失败(端口8080)不可用

我的切入点是文件/ bin中/ WWW

我建立这个作为openshift入口点与该线路的package.json文件(每this thread):

"main": "bin/www", 

我有确信使用环境变量根据指南,像这样设置我的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://[email protected].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); 

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

我添加了一些日志记录来测试它在哪个端口上运行,但日志语句永远不会运行。下面是代码

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);之前就失败了这可能与app.js(MongoDb连接被创建)有关。

[/编辑]

+0

'的console.log(端口);',看看它给你的HTTP的流量,你的应用程序服务的 –

+0

后配置无关的MongoDB用。请停止在您的问题中添加不相关的标签 –

+0

这些板上的类似错误消息指出了MongoDb连接字符串的问题。我不愿意在没有更多实质性调查的情况下将其排除在外。 –

回答

11

错误原来是一个与端口无关的通用错误。显然,如果有任何致命的javascript错误,它会提供此消息。

1

我不认为该行会在指定的端口

var server = http.createServer(app); 

你需要告诉它听,像这样的端口上创建服务器:

server.listen(port); 
1

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

app.set('ipaddr', server_ip_address); 
5

我在这里详细提及... Application 'appname' failed to start (port 8080 not available) on open shift node app

解决的办法是你需要听服务器时指定的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(); 
}); 
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方式登录到应用程序,就到了应用程序回购目录(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和COMMITED /推变化。
  5. 问题解决了,应用程序运行!
+2

我想弄清楚如何让第三方应用程序在我的实例上工作,ssh'd应用程序中的'npm start'建议为我提供了修复我遇到的问题。谢谢! – mxplusb

0

对我来说,这是连接字符串。在创建mongodb磁带盒之后建议的那个不起作用:Connection URL: mongodb://$OPENSHIFT_MONGODB_DB_HOST:$OPENSHIFT_MONGODB_DB_PORT/'nodejs'

但是从这个article,通过使用OPENSHIFT_MONGODB_DB_URL变量它工作。

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

}

相关问题