use*_*588 57 nginx amazon-web-services node.js express
我使用快速生成器来创建一个简单的快速应用程序,当在dev上启动时,在localhost:3000上运行正常.
但是,当我使用eb命令 - git aws.push将其推送到弹性beanstalk时,我在生产服务器上遇到502错误.
查看日志,我得到的错误是:
2014/04/01 19:29:40 [error] 24204#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.2.178, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "macenvexp-env-hqv9ucmzev.elasticbeanstalk.com"
2014/04/01 19:29:40 [error] 24204#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.2.178, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8081/favicon.ico", host: "macenvexp-env-hqv9ucmzev.elasticbeanstalk.com"
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的nginx配置.当我运行没有Express的node.js示例应用程序时,它工作正常.这是app.js中的快速代码:
var express = require('express');
var http = require('http');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes');
var users = require('./routes/user');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(app.router);
app.get('/', routes.index);
app.get('/users', users.list);
/// catch 404 and forwarding to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
/// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
这是package.json文件:
{
"name": "macEnvExp",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "DEBUG=macEnvExp node bin/www"
},
"dependencies": {
"express": "~3.4.8",
"static-favicon": "~1.0.0",
"morgan": "~1.0.0",
"cookie-parser": "~1.0.1",
"body-parser": "~1.0.0",
"debug": "~0.7.4",
"jade": "~1.3.0"
}
}
Run Code Online (Sandbox Code Playgroud)
这是bin/www:
#!/usr/bin/env node
var debug = require('debug')('my-application');
var app = require('../app');
app.configure(function(){
app.set('port', process.env.PORT || 3000);
});
console.log(app.get('port'));
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
Run Code Online (Sandbox Code Playgroud)
Fed*_*ico 86
为清楚起见,我将在评论中说明答案.
AWS ELB在node app.jsBEFORE之前运行npm start.node app.js不会给出错误,但它不会打开任何端口.
解决的办法是简单地重命名app.js以任何其他除外server.js(即main.js)和参考,在通过指向它在/ bin/WWW文件斌/ WWW:var app = require('../app');到var app = require('../main');
那它应该正常工作!
为清楚起见,这是我的目录:
package.jsonELB在启动应用程序服务器时将调用该文件.这里有运行启动脚本的指令node bin/www

这是bin/www运行的文件.我们看到了要求../main和app.set('port'...)

然后main.js运行路由的文件和所有:

当我创建项目时,main.js文件被命名app.js.引起的问题是基于优先级ELB启动序列.ELB将启动应用程序并首先检查是否app.js存在 - 如果它存在,则运行node app.js,否则它将检查是否package.json存在并尝试运行npm start.当main.js名称app.jsELB试图通过运行它来启动整个应用程序时.但是,此文件不会打开任何端口.
Log*_*kup 27
重命名的替代方法app.js是创建弹性beanstalk配置文件.例如,.config将.ebextensions文件添加到文件夹中.ebextensions/34.config.NodeCommand将命名空间中的设置更改为aws:elasticbeanstalk:container:nodejs要运行以启动服务器的任何命令.例如,这是一个.config要运行的最小文件,npm start而不是app.js:
option_settings:
- namespace: aws:elasticbeanstalk:container:nodejs
option_name: NodeCommand
value: "npm start"
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs_custom_container.html和http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html#command-options -nodejs了解更多信息.
编辑:更简单的方法 - 使用AWS控制台,配置/软件具有"节点命令"选项 - 只需将其设置为npm start.
| 归档时间: |
|
| 查看次数: |
27485 次 |
| 最近记录: |