Python 如何使用应用程序工厂将Flask应用程序部署到AWS Elastic beanstalk

Python 如何使用应用程序工厂将Flask应用程序部署到AWS Elastic beanstalk,python,amazon-web-services,flask,wsgi,amazon-elastic-beanstalk,Python,Amazon Web Services,Flask,Wsgi,Amazon Elastic Beanstalk,我正在尝试将我的Flask应用程序部署到AWS,但遇到了403禁止的错误。在使用AWS进行了大量测试之后,我似乎发现这是一个错误。我的Flask应用程序目前是使用应用程序工厂编写的,看起来像这样(简化): 然而,在我在Elastic beanstalk上设置了一个环境并在那里部署了我的Flask应用程序之后,我访问了索引页面,得到了一个403禁止的错误。我检查了我的EB日志,发现一个错误 “目标WSGI脚本'/opt/python/current/app/server/application.p

我正在尝试将我的Flask应用程序部署到AWS,但遇到了403禁止的错误。在使用AWS进行了大量测试之后,我似乎发现这是一个错误。我的Flask应用程序目前是使用应用程序工厂编写的,看起来像这样(简化):

然而,在我在Elastic beanstalk上设置了一个环境并在那里部署了我的Flask应用程序之后,我访问了索引页面,得到了一个403禁止的错误。我检查了我的EB日志,发现一个错误

“目标WSGI脚本'/opt/python/current/app/server/application.py' 不包含WSGI应用程序“应用程序”。”

起初我很困惑。我以前在电子商务方面有过其他错误,并曾上网查看。我真的不明白WSGI标准是什么,但我看到有人说,只有当Flask“app”对象名为“application”时,EB才会起作用,这是我有意更改的。然后我查看了AWS文档,意识到他们的示例没有使用应用程序工厂,因此我预感到没有使用应用程序工厂:

from flask import Flask

application = Flask(__name__)    
app = application

...    

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

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

这起作用了。我只能得出结论,因为“application”对象是在应用程序工厂中定义的,或者它返回应用程序而不是使用application.run(),所以它没有向EB注册。同样,我不太理解WSGI以及它与错误的关系。既然我不想绕过重写我的大部分项目,我该如何绕过这个问题并使用应用程序工厂进行部署?

应用程序工厂创建应用程序实例,为其注册路由并返回实例


application
赋值为等于调用
create\u app
返回的值,满足了EB的要求,即实现WSGI的可调用对象公开为
application
名称。

所以你是说,在我原来的应用程序工厂“create\u app”之后,我需要添加一个“application=create\u app()这会奏效吗?嘿,你的建议似乎奏效了!谢谢
from flask import Flask

application = Flask(__name__)    
app = application

...    

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

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