在Heroku上部署Postgres Flask应用程序,“gunicorn.错误.应用程序导入错误:在“app”中找不到属性“app”,”

1sbrub3j  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(220)

我已经尝试将我的Flask应用程序部署到Heroku一天多了,观看/阅读了几个教程,并挖掘了所有我能找到的stackoverflow问题,但仍然没有找到解决我的问题的方法。当我部署我的应用程序时,我得到错误“gunicorn.errors.AppImportError:在'app'中找不到属性'app'。”我多次更改Procfile以让heroku运行我的应用程序,但总是得到相同的错误。
这是我的应用程序的结构:enter image description here
我的过程文件包括以下语句:

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())

完整日志的屏幕截图:enter image description here
任何帮助都将不胜感激,谢谢大家!

7lrncoxx

7lrncoxx1#

app:app告诉Gunicorn在你的app.py文件中(严格地说,在你的app模块中)寻找一个名为app的变量,但是你没有一个具有这个名称的变量。
相反,你有一个 * 函数 * create_app(),它 * 返回 * 你的应用程序对象。
变量名也可以是一个函数调用。在这种情况下,变量名将从模块中导入,然后被调用以获取应用程序对象。这通常被称为“应用程序工厂”模式。
相应地更新您的Procfile

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

nfzehxib2#

根目录中是否有其他文件正在创建应用程序,或者是运行应用程序所需的文件上方的代码?这通常只是一个Python文件,其名称与项目名称相同,类似于app = create_app()
然后你的Procfile需要在该文件中查找应用程序。

web: gunicorn mainApp:app --preload

相关问题