无法连接到AWS RDS MySQL实例时,在Heroku上运行的Flask服务器不会引发错误

时间:2018-06-25 21:43:04

标签: mysql heroku flask ssl-certificate amazon-rds

我正在尝试在Heroku上部署Flask应用。每当我向服务器发出请求时,我的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

查看this后,我决定需要SSL认证heroku。我已经完成了所有步骤,似乎应该可以成功连接。但是,很难在没有任何错误消息的情况下准确地调试它(例如另一位SO张贴者报告的this one)。

有人知道我如何从Heroku获得更好的堆栈跟踪吗?除非我的代码告诉我,否则我不知道错误是什么-我只知道由于某种原因,我的Heroku dyno无法在30秒内连接到我的Amazon RDS MySQL数据库。

还请注意,我的应用程序可以在本地计算机上完美运行。只有当我将它推到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是具有有效AWS实例的URL的配置变量。

0 个答案:

没有答案