web-dev-qa-db-ja.com

Amazon Elastic Beanstalknpmはpackage.jsonを見つけることができません

私はアマゾンウェブサービスに非常に慣れていないので、エラスティックビーンズトークにnode.jsアプリをセットアップしようとしています。インスタンスをセットアップし、サイトをアップロード/デプロイしましたが、正常性が「OK」である間、node.jsログはこれが約30回繰り返されることを示しています。

npm ERR! enoent ENOENT: no such file or directory, open '/var/app/current/package.json'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! Please include the following file with any support request:
npm ERR!     /var/app/current/npm-debug.log
npm ERR! Linux 4.1.13-19.31.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/npm" "start"
npm ERR! node v4.2.3
npm ERR! npm  v2.14.7
npm ERR! path /var/app/current/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open

問題は、npm initで生成したため、package.jsonが存在することです。それが見つからない理由についてのアイデアはありますか?これがpackage.jsonです

{
    "name": "testwebsite",
    "version": "0.0.1",
    "scripts": {
        "start": "node server.js"
    },
    "dependencies": {
        "body-parser": "^1.13.3",
        "express": "^4.13.3",
        "express-session": "~1.0.0",
        "socket.io": "^1.3.7"
    },
    "description": "my website",
    "author": "Matt",
    "engines": {
        "node": ">=0.10.0"
    },
    "main": "server.js",
    "devDependencies": {},
    "license": "ISC"
}
18
user3281826

公式のAWSスレッド[1]から、ソース自体を圧縮するのではなく、トップレベルのディレクトリを圧縮する可能性があるように見えます(これは私の問題でした)。

たとえば、「プロジェクト」というフォルダにすべてのファイルがあるとします。 「プロジェクト」を圧縮するのではなく、「プロジェクト」のcontentsを圧縮してアップロードする必要があります。

[1] https://forums.aws.Amazon.com/thread.jspa?messageID=476022

34

私と同じまたはこれに非常に似た問題があり、コードがElastic Beanstalkが環境変数(8081)として設定するポートではなく、カスタムポートをリッスンしているという事実が原因でした。

Expressアプリを作成した直後に、app.jsまたはserver.jsファイルの上部にあるポートでこの設定を修正しました。例えば:

var app = express();
app.set('port', (process.env.PORT || 5000)); // 5000 was my original port

次に、自分のカスタムポート番号の代わりにapp.listenメソッドでこのポートを使用します。

app.listen(app.get('port'), function () {
    console.log('Server has started! http://localhost:' + app.get('port') + '/');
});

詳細はこちら: http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#nodejs-platform-proxy

3
shrewdbeans

AWSEBでもこれらの奇妙なエラーが発生していました。私は通常、CLIを使用してデプロイしていました。

いくつか試してみてください。

  1. package.jsonが.gitignoreファイルにないことを確認して、リポジトリにコミットされていることを確認します。 EBは、git commit履歴を使用して、何を圧縮して送信するかを決定します。それが含まれていない場合、それはAWSサーバー上にありません

  2. eCにt2.nanoインスタンス(512MBスペース)オプションを使用していましたが、package.jsonに多数のモジュールがあったため、これは問題のように思われました。それが私の悩みの根本的な問題であるかどうかはわかりませんでしたが、少なくとも1GBのスペースがあるインスタンスにアップグレードすると、エラーメッセージが変わりました。

お役に立てれば

1
Tope