Сервер Flask, работающий на Heroku, не выдает ошибку при сбое подключения к AWS RDS MySQL Instance - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь развернуть приложение Flask на Heroku.Всякий раз, когда я делаю запрос к серверу, мой журнал Heroku выдает ошибку тайм-аута H12 без какой-либо другой информации:

2018-06-25T21:25:58.755278+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=live-event-market-api.herokuapp.com request_id=a1638941-9d56-4364-b9e6-ba46b6fa875f fwd="73.186.40.243" dyno=web.1 connect=1ms service=30000ms status=503 bytes=0 protocol=https

После долгих поисков я понял, что проблема связана с подключением кмоя база данных: когда я закомментирую код, который подключается к базе данных, запросы к приложению на Heroku работают нормально.

#create all db tables
@app.before_first_request
def create_tables():
    from database import init_db
    init_db()
    #^^^get rid of all this, and the app works fine on Heroku

После просмотра этого я решил, что мне нужноSSL сертифицирую героку.Я прошел через шаги, и кажется, что я должен успешно подключиться.Тем не менее, очень трудно точно отладить это без каких-либо сообщений об ошибках (например, это , о котором сообщил другой SO).

Кто-нибудь знает, как я могу получить лучший стекслед от Героку здесь?Я не могу знать, в чем заключается ошибка, если мой код не сообщает мне - все, что я знаю, это то, что по какой-то причине мой Heroku dyno не может подключиться к моей базе данных Amazon RDS MySQL в течение 30 секунд.

Примечаниетакже, что мое приложение отлично работает на моей локальной машинеТолько когда я отправляю его в Heroku, у меня начинаются проблемы.

Редактировать: Обратите внимание, как я пытаюсь подключиться к БД:

engine = create_engine(os.environ['DB_URI'],connect_args={'ssl':{'ca':'amazon-rds-ca-cert.pem','cert':'amazon-rds-ca-cert.pem'}})
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

def init_db():
    from models import UserModel, RevokedTokenModel, PromoterModel, EventInfo, Event
    Base.metadata.create_all(bind=engine)

Где DB_URI - конфигурацияпеременная с действительным URL-адресом экземпляра AWS.

...