繁体   English   中英

尝试将 Flask 应用程序部署到 AWS Elastic Beanstalk 时,我不断收到“ModuleNotFoundError: No module named 'app'”错误消息

[英]When trying to deploy a Flask app to AWS Elastic Beanstalk, I keep getting the "ModuleNotFoundError: No module named 'app'" error message

我正在尝试将 Flask Web 应用程序部署到 AWS Elastic Beanstalk,但它始终失败。 当我启动环境时,它向我抛出 502 错误,并且运行状况设置为 Severe,并出现以下错误:

100.0% 的请求因 HTTP 5xx 失败。 并非所有实例上的 ELB 进程都健康。 ELB 运行状况出现故障或不适用于所有实例。 所有实例上的服务受损。

我检查了日志,似乎问题可能归结为两个(可能相关的)错误:

  1. ModuleNotFoundError: 没有名为“app”的模块
  2. 未能在“应用程序”中找到属性“应用程序”。

作为参考,这是我的应用程序的结构:

myApp/
   app/
      admin/
         __init__.py
         ...
      ms/
         __init__.py
         ...
      wf/
         __init__.py
         ...
      static/
         ...
      templates/
         ...
      __init__.py
      models.py
   app.py
   config.py
   requirements.txt

app.py模块如下所示:

from app import create_app

application = app = create_app()

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

app/__init__.py模块看起来像:

from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_cors import CORS, cross_origin
from flask_bootstrap import Bootstrap
from flask_login import LoginManager
from flask_moment import Moment
import os

db = SQLAlchemy()
migrate = Migrate()
bootstrap = Bootstrap()
login = LoginManager()
login.login_view = 'admin.login'
login.login_message = 'Please log in to access this page.'
moment = Moment()

def create_app(config_class=Config):
    application = app = Flask(__name__)
    app.config.from_object(config_class)
    CORS(app)

    db.init_app(app)
    migrate.init_app(app, db, render_as_batch=True)
    bootstrap.init_app(app)
    login.init_app(app)
    moment.init_app(app)

    from app.ms import bp as ms_bp
    app.register_blueprint(ms_bp, url_prefix='/ms', template_folder='templates', static_folder='static')

    from app.wf import bp as wf_bp
    app.register_blueprint(wf_bp, url_prefix='/wf', template_folder='templates', static_folder='static')

    from app.admin import bp as admin_bp
    app.register_blueprint(admin_bp, url_prefix='/admin', template_folder='templates', static_folder='static')

    return app

from app import models

在 AWS EB 环境(在 64 位 Amazon Linux 2/3.1.3 上运行的 Python 3.7)中,我已将 WSGIPath 配置变量设置为app:application 我根据以下建议(来自https://forums.aws.amazon.com/thread.jspa?threadID=321677 )执行此操作:

对于 Linux 2 - python 3.7,这转换为“WSGIPath: myapplication:myapp”,其中 myapplication.py 是模块名称,“app”是设置为烧瓶应用程序对象的变量名称。

正如其他帖子所推荐的那样,我什至(实际上有几次)将app.py更改为application.py (同时还编辑了 WSGIPath 变量),但没有成功。

我已经在本地测试了该应用程序(使用flask runpython app.py ),它在我的本地机器上正常运行,但是当我部署它时,出现错误。

我似乎无休止地寻找解决方案,并且我相信我已经正确实施了在以下(以及通过我的调试过程进行的许多其他修复)中发现的部署和其他修复,尽管似乎都没有工作:

如果有人可以帮助我,将不胜感激!

不知何故,在过去尝试修复部署的过程中,我设法做了足够多的工作以使其接近完成。 我重命名了主文件application.py (来自app.py ),这似乎解决了我的问题。

我还必须为站点的索引值 ('/') 添加一个路由,即使是蓝图也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM