簡體   English   中英

如何使用應用程序工廠將Flask應用程序部署到AWS Elastic beantalk

[英]How to deploy Flask app to AWS Elastic beanstalk using an application factory

我正在嘗試將Flask應用程序部署到AWS並收到403 Forbidden錯誤。 經過AWS的大量測試后,我似乎發現那是一個錯誤。 目前,我的Flask應用是使用應用工廠編寫的,看起來像這樣(簡化):

from flask import Flask

def create_app(test_config=None):
    application = Flask(__name__)
    app = application

    @app.route('/')
    def index():
        return "The index page"

    ...

    return app

但是,在Elastic beantalk上設置環境並在其中部署我的Flask應用程序之后,我訪問了索引頁面,我收到403 Forbidden錯誤。 我在日志中查看了EB,並看到一條錯誤消息:

“目標WSGI腳本'/opt/python/current/app/server/application.py'不包含WSGI應用程序'application'。”

起初我很困惑。 我以前在EB上遇到其他錯誤,並在網上查看。 我不太了解WSGI標准是什么,但是我看到有人說EB僅在Flask的“ app”對象命名為“ application”時才起作用,而我有意對其進行了更改。 然后,我查看了AWS文檔,並意識到他們的示例未使用應用程序工廠,因此直覺上我測試了不使用應用程序工廠:

from flask import Flask

application = Flask(__name__)    
app = application

...    

@app.route('/')
def index():
    return "The index page"

if __name__ == "__main__":
    application.run()

這工作了。 我只能得出結論,因為“應用程序”對象是在應用程序工廠中定義的,或者它返回的是應用程序而不是使用application.run()的事實,所以它沒有在EB中注冊。 同樣,我不太了解WSGI及其與錯誤的關系。 由於我不想解決大部分項目,因此如何解決這個問題並與應用程序工廠一起部署?

應用程序工廠創建應用程序實例,為其注冊路由並返回該實例。

application分配為與對create_app的調用返回的值相等,可以滿足EB的要求,即將實現WSGI的可調用對象公開為application名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM