【问题标题】:Deploying Flask app on Elastic Beanstalk: No module named 'application'在 Elastic Beanstalk 上部署 Flask 应用程序:没有名为“应用程序”的模块
【发布时间】: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


【解决方案1】:

基于 cmets。

问题是由使用自定义烧瓶应用程序路径引起的。默认情况下,EB 期望应用程序位于 application.py 文件中。

解决方案是在 aws:elasticbeanstalk:container:python 选项中使用WSGIPath 指定自定义路径:

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: myapp:application

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 2020-04-29
    • 2022-06-11
    • 2020-10-10
    • 2021-04-28
    • 2016-11-20
    • 2018-03-26
    • 2018-11-09
    • 2017-02-17
    相关资源
    最近更新 更多