0

我已经查看了至少 20 个 stackover flow 答案,以及许多博客文章,但对于如何将我的本地 postgres db 迁移到 heroku 以获得一个简单的烧瓶应用程序,我完全不知所措。我一直在关注几个不同的教程,一切都在本地工作。我可以将应用程序推送到 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 文档的链接,但我对其进行了广泛的审查,但在迁移后我没有找到关于 UndefinedTable 的任何具体内容。我在 Flask 和 SQL 领域的经验很少,我正在尝试通过各种教程来学习。

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

获取在本地服务器上工作的请求

一旦我部署到heroku并尝试运行相同的get请求,我就会得到这个响应 获取不在 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()

这是我的 conig.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
4

0 回答 0