web-dev-qa-db-ja.com

構造化されたFlaskアプリをAWSElasticBeanstalkにデプロイする方法

ここに概説されている手順を使用してテストアプリを正常にデプロイした後: 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にデプロイするにはどうすればよいですか?

14
alh

以下を.ebextensions/<env-name>.configに追加します。

option_settings:
  "aws:elasticbeanstalk:container:python":
    WSGIPath: myApp/handlers/views.py

更新:

.ebextensionsディレクトリがない場合は、プロジェクト用に作成してください。コンテナ設定に関して実行できることの詳細については、 AWS Elastic Beanstalk環境のカスタマイズと設定 ガイドを参照してください。

11
kukido

FlaskアプリケーションをEBにデプロイするときに、同様のディレクトリ構造で同様の問題が発生し、次の2つのことを行う必要がありました。

  1. 私の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)
    
  2. 作成.ebextensions/myapp.config、manage.pyを指す次のブロックを定義します

    option_settings:
      "aws:elasticbeanstalk:container:python":
        WSGIPath: manage.py
      "aws:elasticbeanstalk:container:python:staticfiles":
        "/static/": "application/static/" 
    

これにより、ElasticBeanstalkはアプリケーションを正しく呼び出し可能にすることができます。

これは 公式ドキュメント で簡単に説明されており、より詳細に説明されています このブログ投稿で

編集-以下のプロジェクト構造を参照してください

  • ProjectRoot
    • .ebextensions
      • application.config
    • 応用
      • メイン
        • forms.py
        • views.py
    • 静的
    • テンプレート
    • テスト
    • manage.py
    • requirements.txt
    • config.py
    • などなど
11
Will B

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

このエラーは、Beanstalkがデフォルトでapplication.pyを検索するために表示されます。 Beanstalk Web UIで確認してください、Configuration > Software ConfigurationWSGIPathapplication.pyにマップされています

WSGIPath is set by default to application.py. Set to manage.py.

前の返信に示されているようにWSGIPathを更新するか、application.pyファイルに名前を変更します。

6
Tirtha R

Awsebcli 3.0以降、構成設定を実際に編集して、eb configを介してWSGIパスを表すことができます。次に、configコマンドは、現在の構成設定に基づいて編集可能な構成をプルします(そして、デフォルトのコマンドラインテキストエディター、つまりnanoで開きます)。次に、WSGIを検索し、そのパスを更新します。ファイルを保存して終了すると、WSGIパスが自動的に更新されます。

5
davetw12

この問題が発生したのは、GUIを使用してプロジェクトファイルのZipをアップロードしていたためです。最初は、プロジェクトレベルのディレクトリを圧縮し、そのZipをEBにアップロードしていました。

次に、プロジェクトファイル自体のZipをアップロードするだけに切り替えました(つまり、すべてのファイルを選択してZipに送信します)。その後、application.pyファイルがであったため、GUIアップロードユーティリティは問題なくapplication.pyファイルを見つけることができました。サブフォルダーにはありません。

1
Bjc

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アプリを起動します(うまくいけば!)

1
Bedi Egilmez

ええと、私の場合、私はプロセスと規則全体に従いましたが、それでも404を取得していました。問題は私の仮想環境でした。 .gitignoreにある環境構成関連のフォルダー/ファイルをすべて無視していましたが、.ebignoreにはありませんでした。 。ebignoreを作成し、プロジェクトコードに関連しないすべてのフォルダー/ファイルを無視した後、問題を修正しました。

0
amar