将postgres db迁移到heroku时,如何处理psycopg2未定义表错误?

2024-05-19 10:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经查看了至少20个stackover flow答案,加上许多博客帖子,对于如何将我的本地postgres db迁移到heroku以获得一个简单的flask应用程序,我完全不知所措。我一直在跟随几个不同的教程,所有的东西都在本地运行。我可以在heroku上推送应用程序进行生产,在这一过程中我没有收到任何错误。具体而言,我正在终端中连续运行以下程序:

python manage.py db init
python manage.py db migrate
python manage.py db upgrade
heroku create hud-mfi-api
git remote add prod https://git.heroku.com/hud-mfi-api.git
heroku config:set APP_SETTINGS=config.ProductionConfig --remote prod
heroku addons:create heroku-postgresql:hobby-dev --app hud-mfi-api
git push prod master
heroku run python manage.py db upgrade --app hud-mfi-api

然后当我转到应用程序时,我得到psycopg2.errors.UndefinedTable。错误中包含一个指向SQLAlchemy文档的链接,但我对它进行了广泛的审查,没有发现任何关于迁移后不可定义的特定内容。我在Flask和SQL领域的经验很少,我正在通过各种教程进行学习

我的一个假设是,我已经有了一个填充了值的数据库,在所有教程中,他们都在设置一个空数据库。我不知道为什么这会是一个问题,但是如果一切都在我的本地版本上正常工作(即python manage.py runserver

GET REQUEST WORKING ON LOCAL SERVER

一旦我部署到heroku并尝试运行相同的get请求,我就会得到这个响应 GET REQUEST NOT WORKING ON HEROKU

我提前道歉,因为我知道这样的问题很常见。我试图尽可能多地包含相关信息,但目前我对这个过程感到非常失望。我花了很多时间阅读文档,但现在我认为SQL方面存在一些问题,但我无法解析它。提前谢谢

这是我的app.py的代码

import os

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_object(os.environ['APP_SETTINGS'])
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


from models import MFI


@app.route("/getall")
def get_all():
    try:
        median_incomes = MFI.query.all()
        return jsonify([e.serialize() for e in median_incomes])
    except Exception as e:
        return(str(e))


@app.route("/get/<geoid_>")
def get_by_geoid(geoid_):
    try:
        median_income = MFI.query.filter_by(geoid=geoid_).first()
        return jsonify(median_income.serialize())
    except Exception as e:
        return(str(e))


if __name__ == '__main__':
    app.run(debug=True)

下面是manage.py文件的代码

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

from app import app, db

migrate = Migrate(app, db)
manager = Manager(app)

manager.add_command('db', MigrateCommand)


if __name__ == '__main__':
    manager.run()

这是我的congig.py脚本

import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
    DEBUG = False
    TESTING = False
    CSRF_ENABLED = True
    SECRET_KEY = 'this-really-needs-to-be-changed'
    SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']


class ProductionConfig(Config):
    DEBUG = False


class StagingConfig(Config):
    DEVELOPMENT = True
    DEBUG = True


class DevelopmentConfig(Config):
    DEVELOPMENT = True
    DEBUG = True


class TestingConfig(Config):
    TESTING = True

Tags: frompyimportconfigtrueappflaskdb

热门问题