[英]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.