AWS Elastic Beanstalk は、Node.js アプリのパブリック フォルダーから静的ファイルをロードしません

AWS Elastic Beanstalk は、Node.js アプリのパブリック フォルダーから静的ファイルをロードしません

静的ファイル.config(NodejsPlayGround\ .elasticbeanstalk\staticfiles.config) ファイル

option_settings:
aws:elasticbeanstalk:container:nodejs:staticfiles:
/public: public

インデックス.hbs(NodejsPlayGround\views\index.hbs) ファイル

<!DOCTYPE html>
<html>
<head>
<title>NodeSeverTest</title>
<script src="js/client.js"></script>
</head>
<body>
<h1>Hello</h1>
</body>
</html>

サーバー.js(NodejsPlayGround\server.js) ファイル

'use strict';
const express = require('express');
const path = require('path');

const app = express();
const port = process.env.PORT || 3000;

const views_path = path.join(__dirname, 'views');
const static_path = path.join(__dirname, 'public')

app.set('view engine', 'hbs');
app.set('views', views_path);

app.get('', (req, res) => {
res.render('index', {
title: 'Weather App',
name: 'ArunKumar Arjunan'
}
);
});
app.listen(port, () => {
console.log('server started on port ' + port);
});

クライアント(NodejsPlayGround\public\js\client.js) ファイル:

console.log('client side java script file is loaded');

これを eb deploy でデプロイすると、client.js がロードされず、404 エラー (リソースのロードに失敗しました: サーバーは index.hbs で 404 (見つかりません) のステータスで応答しました) が返されます。

私はインターネットであらゆる手順を試しましたが、そのために 2 日間を無駄にしました。

誰か助けてくれませんか? これはバグですか、それとも私が何か間違っているのでしょうか?

答え1

これに関する AWS のドキュメントとは反対に、フォルダー パスの先頭にもスラッシュが必要であることがわかりました。つまり、(だけではなく)または(だけではなく)/publicにマップします。/publicpublic/static/staticstatic

私は EB インスタンス上の nginx エラー ログと conf ファイルを調べることでこれを把握しましたが、どちらも では/var/app/currentstaticなく で静的ファイルを探していることがわかりました/var/app/current/static

関連情報