Как обработать неопределенную ошибку таблицы psycopg2 при переносе postgres db в heroku? - PullRequest
0 голосов
/ 03 февраля 2020

Я просмотрел не менее 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)

GET REQUEST WORKING ON LOCAL SERVER

Однажды я затем развернитесь в heroku и попробуйте выполнить тот же запрос на получение. Я получаю этот ответ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...