尝试将 Flask 应用程序部署到 AWS Elastic Beanstalk 时,我不断收到“ModuleNotFoundError: No module named 'app'”错误消息
Posted
技术标签:
【中文标题】尝试将 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 应用程序部署到 AWS Elastic Beanstalk 时,我不断收到“ModuleNotFoundError: No module named 'app'”错误消息 【发布时间】:2021-03-06 17:16:34 【问题描述】:我正在尝试将 Flask Web 应用程序部署到 AWS Elastic Beanstalk,但始终失败。当我启动环境时,它会抛出 502 错误,并且运行状况设置为 Severe 并出现以下错误:
100.0 % 的请求以 HTTP 5xx 失败。 ELB 进程并非在所有实例上都运行良好。 ELB 运行状况失败或不适用于所有实例。所有实例的服务受损。
我检查了日志,似乎问题可能归结为两个(可能相关的)错误:
-
ModuleNotFoundError: 没有名为“app”的模块
在“应用程序”中找不到属性“应用程序”。
作为参考,这是我的应用程序的结构:
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 run
和python app.py
),它在我的本地计算机上正常运行,但是当我部署它时,我得到了错误。
我似乎在无休止地寻找解决方案,并且我相信我已经正确实施了以下(以及许多其他通过我的调试过程)找到的部署和其他修复,但似乎没有一个有效:
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create-deploy-python-flask.html https://medium.com/@rodkey/deploying-a-flask-application-on-aws-a72daba6bb80 https://medium.com/@pbojinov/elastic-beanstalk-and-flask-c51e10de7fe0 http://jtushman.github.io/blog/2013/06/12/first-impressions-with-flask-and-elastic-beanstalk/ No module named 'application' Error while deploying simple web app to Elastic Beanstalk https://forums.aws.amazon.com/thread.jspa?threadID=321677如果有人可以帮助我,将不胜感激!
【问题讨论】:
你在哪里设置app:application
?您的应用结构没有显示任何 .ebextentions
?
我使用了 Elastic Beanstalk 管理控制台(在配置 > 软件下)部分。我用了.ebextentions
一点,但似乎对结果没有影响。
【参考方案1】:
在过去尝试修复部署的过程中,我设法做了足够多的工作以使其接近成功。我重命名了主文件application.py
(来自app.py
),这似乎解决了我的问题。
我还必须为站点的索引值 ('/') 添加路由,即使使用蓝图也是如此。
【讨论】:
以上是关于尝试将 Flask 应用程序部署到 AWS Elastic Beanstalk 时,我不断收到“ModuleNotFoundError: No module named 'app'”错误消息的主要内容,如果未能解决你的问题,请参考以下文章
如何使用应用程序工厂将 Flask 应用程序部署到 AWS Elastic beanstalk
Flask 应用程序 - 部署到 AWS Elastic Beanstalk 时出错
使用 pandas 将 Flask 应用程序部署到 Elastic Beanstalk
如何使用 SSL 将 AWS EC2 Flask 应用程序部署到 HTTPS 端口 443?
Angular Universal - 部署到 AWS Elastic Beanstalk
将使用 Celery 和 Redis 的 Flask 应用程序部署到 AWS:直接使用 Elastic Beanstalk 还是 EC2?