我已经尝试将我的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
任何帮助都将不胜感激,谢谢大家!
2条答案
按热度按时间7lrncoxx1#
app:app
告诉Gunicorn在你的app.py
文件中(严格地说,在你的app
模块中)寻找一个名为app
的变量,但是你没有一个具有这个名称的变量。相反,你有一个 * 函数 *
create_app()
,它 * 返回 * 你的应用程序对象。变量名也可以是一个函数调用。在这种情况下,变量名将从模块中导入,然后被调用以获取应用程序对象。这通常被称为“应用程序工厂”模式。
相应地更新您的
Procfile
:nfzehxib2#
根目录中是否有其他文件正在创建应用程序,或者是运行应用程序所需的文件上方的代码?这通常只是一个Python文件,其名称与项目名称相同,类似于
app = create_app()
。然后你的
Procfile
需要在该文件中查找应用程序。