Node.js 应用程序启动失败(端口8080)不可用
我正在尝试将我的node.js应用程序(使用express和mongoose)部署到openshift,但我无法这样做。该应用程序在我的本地环境中运行良好 我的入口点是文件/bin/www 我使用package.json文件(per)中的这一行将其作为openshift的入口点: 我已确保根据指南使用环境变量设置mongodb连接,如下所示:Node.js 应用程序启动失败(端口8080)不可用,node.js,mongodb,openshift,Node.js,Mongodb,Openshift,我正在尝试将我的node.js应用程序(使用express和mongoose)部署到openshift,但我无法这样做。该应用程序在我的本地环境中运行良好 我的入口点是文件/bin/www 我使用package.json文件(per)中的这一行将其作为openshift的入口点: 我已确保根据指南使用环境变量设置mongodb连接,如下所示: // default to a localhost configuration: var mongoConnectionString = '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
我真的不知道该从这里走到哪里。我似乎没有足够的信息来决定下一步
[编辑]
我添加了一些日志来测试它在哪个端口上运行,但是日志语句从未运行过。这是密码
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)
测试
module.js:340
犯错误;
^
错误:找不到模块“./routes/logIn”
在Function.Module.\u解析文件名(Module.js:338:15)
在Function.Module.\u加载(Module.js:280:25)
at Module.require(Module.js:364:17)
根据需要(模块js:380:17)
反对。(/var/lib/openshift/558a25bd5973ca7a74000162/app root/runtime/repo/app.js:26:13)
TEST
来自入口点文件开头的日志语句。在点击console.log(“端口:”,PORT)之前,有些东西似乎失败了
这可能与建立MongoDb连接的app.js
有关
[/edit]我认为此行不会在指定端口上创建服务器
var server = http.createServer(app);
您需要告诉它在端口上监听,如下所示:
server.listen(port);
当你的应用在正确的端口上侦听时,缺少的是你没有指定要侦听的IP地址。在下面的app.set('port',port')中添加类似的内容
我在这里已经详细提到了 解决方案是在侦听服务器时需要指定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();
});
具有完全相同的错误消息:
打开的换档节点应用程序上的应用程序“appname”启动失败(端口8080不可用)
经过大量阅读,发现许多不同的用户针对同一个错误消息采用了不同的解决方案,包括我自己。所以我建议不要为这个错误寻找快速的解决方案。
最重要的步骤是下表中的步骤1
我的解决方案是在package.json中添加一个缺少的依赖项,对于我的特殊情况,我需要添加“bcrypt”:“~0.8.5”
,这太愚蠢了
现在,我如何在知道“端口8080不可用”错误的情况下解决问题:
cd$OPENSHIFT\u repo\u dir
)并运行npm start
[…]错误:找不到模块“bcrypt”[…]
该错误原来是与端口无关的一般错误。显然,如果有任何致命的javascript错误,它会给出此消息。对我来说,这是连接字符串。在您创建mongodb盒带后建议的一个不起作用:
连接URL:mongodb://$OPENSHIFT\u mongodb\u DB\u主机:$OPENSHIFT\u mongodb\u端口/'nodejs'
但是通过使用OPENSHIFT\u MONGODB\u DB\u URL
变量,它起到了作用
if(process.env.OPENSHIFT_MONGODB_DB_URL){
mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + db_name;
}
console.log(端口)
并查看它为您提供了什么。针对http流量的应用程序服务的POST配置与MongoDB无关。请停止在问题中添加不相关的标记。这些板上显示的类似错误消息表明MongoDb连接字符串存在问题。我不愿意排除这一可能的原因,如果没有更实质性的查询端口8080显然是您的
OPENSHIFT\u NODEJS\u PORT`的设置。您的错误消息也不是关于MongoDB连接,而是等待http的服务端口。很明显。我可以整天这样做。对于一个与主题无关的问题,我们不需要太多的噪音。我真的要举报你的骚扰。我正试图找出如何让第三方应用程序在我的实例上运行,ssh应用程序上的npm start
建议为我提供了解决问题的工具。谢谢
app.set('ipaddr', server_ip_address);
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();
});
if(process.env.OPENSHIFT_MONGODB_DB_URL){
mongodb_connection_string = process.env.OPENSHIFT_MONGODB_DB_URL + db_name;