1. ホーム
  2. amazon-web-services

[解決済み】あなたのWSGIPathは、存在しないファイルを参照しています。

2022-01-30 12:10:17

質問

FlaskアプリケーションをAWSにアップロードしようとしているのですが、エラーが発生します。

WSGIPath は存在しないファイルを参照しています。

ネットで調べたところ、.ebextensions フォルダで、パスを指定する必要があることがわかりました。.ebextensionsフォルダがなかったので、フォルダを作成し、settings.configというファイルに以下のコードを追加しました。

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: project/application.py

WSGIPath は application.py ファイルへの正しいパスなので、何がこのエラーを発生させるのかよくわかりません。WSGIPathを正しく変更すればいいのか、もっといい方法があるのか、それとも何か他の問題でこの現象が起きているのか?ありがとうございます。

解決方法は?

AWS上にデプロイされたFlaskには、様々な設定上の問題があります。私もあなたと同じような問題にぶつかっていたので、少なくともWSGIエラーを解決するために何をしたかをお見せすることができます。

まず、どうやら.ebextensionsフォルダがなくてもできるようです(こちらの記事参照 こちら .そしてdavetw12さんの回答を見てください。ただし、これは動作しますが、以下のいくつかのコメントから、.ebextensions に関する davetw12 の結論が正しいかどうか完全にはわからないことに注意してください)。代わりに、(ターミナルで)私の.elasticbeanstalkディレクトリと同じレベルのプロジェクトに移動し、コマンドを使用しました。 eb config . これは、Beanstalkアプリケーションを構成するために設定できるオプションのリストを開きます。WSGIパスを見つけるまで、オプションを下っていきます。あなたが設定したのは project/application.py しかし、これにはフォルダの参照は含まれず、単に application.py . 以下は、私のMacでターミナルを表示したときの様子です(WSGIのパスは下部付近にあります)。

一旦この設定をすると、EBはおそらく再展開することになることに注意してください。それはそれでいいんです。そうさせましょう。

この設定ができたら、application.py ファイルに移動して、アプリを呼び出すことを確認します。 application . 例えば、私のはこんな感じです。

from flask import Flask
from flask import render_template
application = Flask(__name__)

@application.route('/')
@application.route('/index')
def index():
    return render_template('index.html',
                           title='Home')

これでWSGIのパスエラーは解消されましたが、この後もいくつかの問題を修正しなければなりませんでした :-) しかし、これは別の質問です。