【发布时间】:2019-03-29 10:27:33
【问题描述】:
我正在尝试将我的 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 beanstalk 上设置环境并在那里部署我的 Flask 应用程序后,我访问了索引页面,我收到了 403 Forbidden 错误。我检查了我的 EB 日志,并看到一条错误消息
"目标 WSGI 脚本 '/opt/python/current/app/server/application.py' 不包含 WSGI 应用程序“应用程序”。”
起初我很困惑。我以前在 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 以及它与错误的关系。由于我不想重写我的大部分项目,我该如何解决这个问题并使用应用程序工厂进行部署?
【问题讨论】:
标签: python amazon-web-services flask wsgi amazon-elastic-beanstalk