【发布时间】:2021-01-08 01:19:33
【问题描述】:
在主模块的 __init__.py 文件中有一个 Flask application 初始化的 Flask 应用程序,就像 Flask 文档有 here 一样(除了我不使用应用程序工厂类型函数)
myapp/
myapp/
__init__.py # application = Flask(__name__) is here
static/
templates/
...
requirements.txt
当FLASK_APP 设置为myapp 时,本地环境在flask run 下运行良好。
我尝试通过 eb-cli 部署 Beanstalk,并且我在 .ebextensions/options.yml 中设置了 FLASK_APP,如下所示:
option_settings:
aws:elasticbeanstalk:application:environment:
LC_ALL: en_US.utf8
FLASK_APP: myapp
FLASK_ENV: production
那我就跑了:
eb init -p python-3.7 myapp --region us-east-1
eb create myapp-env
似乎可以正常启动,但是环境变差了,我得到一个 502 并且日志显示 Flask 应用程序由于No module named 'application'而无法正确启动
我的印象是设置 FLASK_APP 就足以找到 Flask 应用实例。
在这种情况下,如何通过 Elastic Beanstalk 部署 Flask 应用程序?我是否需要以某种方式进一步指定入口点?
【问题讨论】:
-
我认为您必须自定义
WSGIPath,因为您的应用程序不是application.py。您可以使用aws:elasticbeanstalk:container:python 来执行此操作。 -
知道这应该是什么样子吗?我正在尝试使用
WSGIPath: application。 -
我将首先重命名/重构您的代码(如果可能)以使用
application.py而不是__init_.py,以确认这实际上是问题所在。application.py应该在文件夹的根目录中,而不是子文件夹中。.ebextensions/options.yml也不正确。扩展名应为.config。如果你确认了这一点,那么你就知道应该把精力集中在哪里来解决问题。不知道如何使用__init__.py。必须尝试在WSGIPath中使用它。 -
答案是
WSGIPath: myapp:application。你想把这个作为答案吗?我会把它标记为正确的。 -
谢谢。是的,我想提供一个答案:-)
标签: python-3.x amazon-web-services flask amazon-elastic-beanstalk