在 Heroku 上部署 Postgres Flask 应用程序,"gunicorn.errors.AppImportError: Failed to find attribute 'app' i



一天多来,我一直在尝试将我的Flask应用程序部署到Heroku,观看/阅读了几篇教程,并深入研究了我能找到的所有stackoverflow问题,但仍然没有找到解决我问题的方法。当我部署我的应用程序时,我会收到错误";gunicorn.errors.AppImportError:在"app"中找不到属性"app"为了让heroku运行我的应用程序,我已经多次更改了我的Procfile,但我总是遇到同样的错误。

这就是我的应用程序的结构:在此处输入图像描述

我的Procfile包含以下语句:

web: gunicorn app:app --preload

我想我的问题可能是如何创建我的应用程序,但找不到解决方案。我的主应用程序文件如下:

from venv import create
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os.path import join, dirname, realpath
from flask_login import LoginManager
db = SQLAlchemy()
def create_app():
app = Flask(__name__, static_folder='static')
app.debug = True
app.config['SECRET_KEY'] = 'abcde12568901fghij'
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
app.config['SQLALCHEMY_DATABASE_URI'] = '[removed for privacy]'
app.config['UPLOAD_DIRECTORY'] = join(dirname(realpath(__file__)), 'uploads/')
app.config['MAX_CONTENT_LENGTH'] = 16*1024*1024 #16mb
app.config['ALLOWED_EXTENSIONS'] = ['.jpg','.jpeg','.png','.gif','.mp4']
db.init_app(app)
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
from models import User
@login_manager.user_loader
def load_user(user_id):
# since the user_id is just the primary key of our user table, use it in the query for the user
return User.query.get(int(user_id))
from auth import auth
app.register_blueprint(auth)
from views import main
app.register_blueprint(main)
return app
if __name__ == '__main__':
db.create_all(app=create_app())

完整日志的屏幕截图:在此处输入图像描述

任何帮助都将不胜感激,谢谢大家!

app:app告诉Gunicorn在app.py文件(严格地说,在app模块中(中查找一个名为app的变量,但您没有该名称的变量。

相反,您有一个函数create_app()返回您的应用程序对象。Gunicorn允许您直接使用:

变量名也可以是函数调用。在这种情况下,名称将从模块中导入,然后调用以获取应用程序对象。这通常被称为";应用工厂";图案

相应地更新您的Procfile

web: gunicorn 'app:create_app()' --preload

您的根目录中是否有另一个正在创建应用程序的文件,或者是您为运行应用程序而运行的文件上方的代码?这通常只是一个带有项目名称的Python文件,它将具有类似app = create_app()的内容。

然后您的Procfile需要在该文件中查找应用程序。例如,如果该文件名为mainApp.py,那么您将使用

web: gunicorn mainApp:app --preload

最新更新