AWS beanstalkにデプロイするときにいくつかの問題に遭遇しました。
最初はNode.jsアプリに問題があると思っていましたが、次にクリーンインストールを試しました。
WebStormで空のNode.js Expressアプリを作成しました。 nginx 1.6.2で実行されるAWS Beanstalkで新しいアプリケーションを作成しました
次に、アプリを圧縮してBeanstalkコンソールからデプロイします。
アップロードは正常に完了しましたが、アプリケーションを実行すると、502の不正なゲートウェイが表示されます。
Web Stormがポート3000で実行されるアプリを作成するため、デフォルトのポートを変更しようとしました。そのため、8081に変更しました。それでもエラーが発生します。ログでエラーを検索すると、次のことがわかります。
/var/log/nodejs/nodejs.log
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/app/current/app.js:8:14)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)module.js:340
throw err;
Error: Cannot find module '/var/app/current/routes/index'
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/app/current/app.js:8:14)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
module.js:340
相対パスが原因でノードがモジュールを見つけられないことが問題であることは明らかなので、絶対パスを使用するように相対パスを持つすべてのエントリを変更しました。例えば
var app = require('../app');
に変わった
var path = require('path');
var app = require(path.join(__dirname, '../app'));
それでも同じエラーが発生します。
また、nginxログに次のエラーが表示されます。
/var/log/nginx/error.log
-------------------------------------
2014/12/05 14:28:35 [error] 23444#0: *7 connect() failed (111: Connection refused) while connecting to upstream, client: 172.31.25.31, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "nodesampleapp-env.elasticbeanstalk.com"
なぜこれが起こっているのか?
どんな助けにも感謝します。
package.jsを修正してください!
私の場合、ノードのファイル名が間違っていました。
{
"name": "your application-name",
"version": "0.0.1",
"private": true,
"scripts":
{
"start": "node app_bot.js"
},
...