我正在尝试在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的配置变量。