ここに概説されている手順を使用してテストアプリを正常にデプロイした後: http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_Python_flask.html
次の構造を持つ実際のflaskアプリケーションをデプロイしようとしました:
myApp/
runServer.py
requirements.txt
myApp/
__init__.py
helpers.py
clean.sh
static/
myApp.css
handlers/
__init__.py
views.py
templates/
layout.html
viewOne.html
viewTwo.html
ここで、views.py
には私のURLマッピングが含まれています。
ルートディレクトリとeb
モジュールおよびgit aws.Push
内でmyApp
インスタンスを初期化しようとしましたが、AWSダッシュボードで次のエラーが発生します:ERROR Your WSGIPath refers to a file that does not exist.
アプリケーションが機能しません(どのパスでも404)。
上記のFlask
アプリケーションをエラスティックbeanstalkにデプロイするにはどうすればよいですか?
以下を.ebextensions/<env-name>.config
に追加します。
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: myApp/handlers/views.py
更新:
.ebextensionsディレクトリがない場合は、プロジェクト用に作成してください。コンテナ設定に関して実行できることの詳細については、 AWS Elastic Beanstalk環境のカスタマイズと設定 ガイドを参照してください。
FlaskアプリケーションをEBにデプロイするときに、同様のディレクトリ構造で同様の問題が発生し、次の2つのことを行う必要がありました。
私のmanage.pyを更新して、アプリではなく名前アプリケーションのオブジェクトを作成します
import os
from application import create_app, db
from flask.ext.script import Manager, Shell
application = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(application)
作成.ebextensions/myapp.config
、manage.pyを指す次のブロックを定義します
option_settings:
"aws:elasticbeanstalk:container:python":
WSGIPath: manage.py
"aws:elasticbeanstalk:container:python:staticfiles":
"/static/": "application/static/"
これにより、ElasticBeanstalkはアプリケーションを正しく呼び出し可能にすることができます。
これは 公式ドキュメント で簡単に説明されており、より詳細に説明されています このブログ投稿で
編集-以下のプロジェクト構造を参照してください
Awsebcli 3.0以降、構成設定を実際に編集して、eb config
を介してWSGI
パスを表すことができます。次に、config
コマンドは、現在の構成設定に基づいて編集可能な構成をプルします(そして、デフォルトのコマンドラインテキストエディター、つまりnanoで開きます)。次に、WSGI
を検索し、そのパスを更新します。ファイルを保存して終了すると、WSGI
パスが自動的に更新されます。
この問題が発生したのは、GUIを使用してプロジェクトファイルのZipをアップロードしていたためです。最初は、プロジェクトレベルのディレクトリを圧縮し、そのZipをEBにアップロードしていました。
次に、プロジェクトファイル自体のZipをアップロードするだけに切り替えました(つまり、すべてのファイルを選択してZipに送信します)。その後、application.pyファイルがであったため、GUIアップロードユーティリティは問題なくapplication.pyファイルを見つけることができました。サブフォルダーにはありません。
WSGIの構成は私にとって苦痛でした。 _eb config
_コマンドを使用してWSCI設定を変更しましたが、機能しませんでした。以下では、5つの簡単なステップでこれを修正できます。
1- _app.py
_関数をディレクトリのルートに移動しました(ここで_eb init
_コマンドを実行しました。
2-また、_app.py
_の名前を_application.py
_に変更し、その初期化されたアプリケーションではapplication = Flask(__name__)
ではなくapp = Flask(__name__)
に変更しました。
3- _eb deploy
_がこの後機能しませんでした(同じプロジェクトで)_eb config
_を使用して構成を修正しようとしましたが、それを整理するには毛が多すぎました。プロジェクトからすべての.extensions、.gitignoreなどを削除します。
4- EBでプロジェクトを_eb init
_で再初期化し、プロンプトに従います。デプロイが完了すると、_eb open
_がWebアプリを起動します(うまくいけば!)
ええと、私の場合、私はプロセスと規則全体に従いましたが、それでも404を取得していました。問題は私の仮想環境でした。 .gitignoreにある環境構成関連のフォルダー/ファイルをすべて無視していましたが、.ebignoreにはありませんでした。 。ebignoreを作成し、プロジェクトコードに関連しないすべてのフォルダー/ファイルを無視した後、問題を修正しました。