我已经查看了至少 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请求,我就会得到这个响应
我提前道歉,因为我知道这样的问题很常见。我试图包含尽可能多的相关信息,但在这一点上,我对这个过程感到非常沮丧。我已经花时间浏览文档,但此时我认为 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