Я просмотрел не менее 20 ответов о потоке стека, а также множество постов в блогах, и я совершенно не понимаю, как перенести мой локальный postgres db на heroku для простого flask приложения. Я следовал вместе с несколькими различными учебниками, и все работает локально. Я могу поставить приложение sh в производство на 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
Когда я затем go в приложение, я получаю psycopg2.errors.UndefinedTable
. В сообщение об ошибке включена ссылка на документацию по SQLAlchemy, но я тщательно изучил ее и не нашел ничего, что конкретно указывало c на UndefinedTable после миграции. У меня очень мало опыта в мире Flask и SQL, и я пытаюсь учиться, просматривая различные учебные пособия.
Одна из моих гипотез состоит в том, что у меня уже есть база данных, заполненная значениями, и во всех руководствах они устанавливают пустую базу данных. Я не знаю, почему это было бы проблемой, хотя, если все работает правильно на моей локальной версии (то есть python manage.py runserver
)
Однажды я затем развернитесь в 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