2015-03-03 64 views
1

我正在运行502尝试在Elastic Beanstalk上运行NodeJS应用程序的Bad Gateway问题。我试图按照一个stackoverflow答案,告诉我要将我的起始脚本从server.js更改为main.js,但这并不奏效。我使用的是设置在.env文件中的env变量,它不是我git存储库的一部分,是否会导致此错误,还是因为启动脚本?502坏网关NodeJS/MongoDB AWS Elastic Lectstalk

我的配置仪表板中的这部分应该更改为我的开始文件吗?

enter image description here

这里是我的应用程序设置:

框架:Expressjs

数据库:MongoDB的

弹性魔豆服务器:64位Linux的亚马逊2014.09 V1.2.0运行Node.js的

我检查了我的日志,发现我的/var/log/nginx/error.log中没有任何内容,唯一的错误部分是coul d仅查找包含有关可能导致错误的信息。

{"status":"SUCCESS","api_version":"1.0","truncated":"false","results":[{"status":"SUCCESS","msg":"","returncode":0,"events":[{"msg":"No start scripts located in package.json. Node.js may have issues starting. Add start scripts or place code in a file named server.js or app.js.","severity":"ERROR","timestamp":1425234947517}]}]} 

这里是我的package.json文件:

{ 
    "name": "expressjs-blog", 
    "main": "main.js", 
    "dependencies": { 
    "body-parser": "1.6.5", 
    "ejs": "^1.0.0", 
    "express": "^4.6.1", 
    "express-paginate": "0.0.2", 
    "mongoose": "~3.6.15", 
    "mongoose-paginate": "^3.1.0", 
    "serve-favicon": "*", 
    "passport" : "~0.1.17",   
    "passport-local" : "~0.1.6", 
    "connect-flash" : "~0.1.1",  
    "bcrypt-nodejs" : "latest", 
    "morgan": "~1.0.0", 
    "cookie-parser": "~1.0.0", 
    "method-override": "~1.0.0", 
    "express-session": "~1.0.0", 
    "aws-sdk": "*" 
    } 
} 

这里是我的main.js文件:

//Load express 
var express = require('express'); 
var app = express(); 
var router = express.Router(); // get an instance of the router 
var bodyParser = require('body-parser'); // configure app to use bodyParser() 
var mongoose = require('mongoose'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 
var morgan = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var session = require('express-session'); 
var aws = require('aws-sdk'); 

app.use(bodyParser.urlencoded({ extended: true})); // get data from a POST method 
app.use(bodyParser.json()); 
app.use(morgan('dev')); 
app.use(cookieParser()); 


var port = process.env.PORT || 8080; // set the port 

var DB_CONFIG = process.env.DB_CONFIGURATION; 
var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY; 
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY; 
var S3_BUCKET = process.env.S3_BUCKET; 

var blogDB = require('./config/blogDB.js'); 
mongoose.connect(blogDB.url); 




require('./config/passport.js')(passport); 


app.set('view engine', 'ejs'); // set ejs as the view engine 

app.use(express.static(__dirname + '/public')); // set the public directory 

app.use(session({ secret: 'thisisatest' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 

app.use(flash()); 


var routes = require('./app/routes'); 

app.use(routes); // use routes.js 


app.listen(port); 
console.log('magic is happening on port' + port); 

----------- UPDATE - -----------

我将env变量添加到Amazon配置仪表板中t将允许它看到连接到数据库和其他变量的位置。现在我收到一个错误日志:

/var/log/nginx/error.log

2015/03/04 17:12:03 [error] 15978#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xxx.xx, server: , request: "GET/HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "xxxxx-d-xxxxxx-env-xxxxx.elasticbeanstalk.com" 
2015/03/04 17:12:03 [error] 15978#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xxx.xx, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8081/favicon.ico", host: "xxxxx-d-xxxxx-env-xxxxxx.elasticbeanstalk.com" 
2015/03/04 17:16:27 [error] 15978#0: *4 connect() failed (111: Connection refused) while connecting to upstream, client: xxx.xxx.xx.xx, server: , request: "GET /phpMyAdmin/translators.html HTTP/1.1", upstream: "http://127.0.0.1:8081/phpMyAdmin/translators.html", host: "xx.xxx.xx.xx" 
2015/03/04 17:20:02 [error] 15978#0: *6 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xx.xx, server: , request: "GET/HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "xxx-d-philxxxxlips-env-rqsrxxe92stf.elasticbeanstalk.com" 
2015/03/04 17:20:03 [error] 15978#0: *6 connect() failed (111: Connection refused) while connecting to upstream, client: xx.xx.xxx.xx, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8081/favicon.ico", host: "xxxx-d-xxx-env-rqsre92xxxstf.elasticbeanstalk.com" 

回答

1

会发生什么事,当你运行npm start本地?错误消息表示您尚未指定启动脚本。 AWS可能使用npm start启动您的服务器,并且该命令似乎失败。

尝试增加了此信息的package.json:

"scripts" : { 
    "start" : "node main.js" 
} 
+0

感谢您的回应。当我尝试在本地运行'npm start'时,我只是在终端中发送一个空行。基本上没有任何反应。我假设这看起来像命令失败一样。我将脚本添加到我的package.json中,但没有任何更改。任何其他提示?也许与'npm start'这个事实有关的事情什么都不做? – cphill 2015-03-04 00:27:37

+0

这可能是因为服务器无法访问我的env变量?当我运行'node main.js'时,会出现一个与不访问mongoDB有关的错误。这听起来是正确的,因为访问连接到一个env变量。我将我的env变量添加到了Elastic Beanstalk配置文件,但我得到了相同的502响应 – cphill 2015-03-04 17:24:40

+0

实际上,现在我已经在配置仪表板中设置了env变量,我终于收到一个错误日志。请参阅编辑的问题以获取错误日志。不知道如何理解这些信息。 – cphill 2015-03-04 17:30:46

1

固定!我所要做的只是进入配置>容器选项并设置节点命令为node main.js