我正在使用已部署到Heroku的Python / Flask Web应用程序。目前,该站点在Flask和Heroku本地Web服务器上都可以在本地正常运行。但是,当我尝试加载网站时,出现以下错误:
2019-05-26T00:48:39.457829+00:00 app[web.1]: [2019-05-26 00:48:39,451] ERROR in app: Exception on /survey/rwubxbi8 [GET]
2019-05-26T00:48:39.457845+00:00 app[web.1]: Traceback (most recent call last):
2019-05-26T00:48:39.457847+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 1244, in _execute_context
2019-05-26T00:48:39.457848+00:00 app[web.1]: cursor, statement, parameters, context
2019-05-26T00:48:39.457850+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/sqlalchemy/engine/default.py", line 552, in do_execute
2019-05-26T00:48:39.457851+00:00 app[web.1]: cursor.execute(statement, parameters)
2019-05-26T00:48:39.457853+00:00 app[web.1]: psycopg2.errors.AdminShutdown: terminating connection due to administrator command
2019-05-26T00:48:39.457854+00:00 app[web.1]: SSL connection has been closed unexpectedly
如果我然后使用heroku run bash
登录到bash shell,然后输入Flask shell,我将能够毫无困难地执行相同的查询。
$ heroku run bash --remote staging
Running bash on ⬢ ****-survey-staging... up, run.9548 (Hobby)
~ $ flask shell
Python 3.7.3 (default, Apr 3 2019, 21:35:17)
[GCC 7.3.0] on linux
App: app.create_app [production]
Instance: /app/instance
>>> Survey
<class 'app.models.Survey'>
>>> survey = Survey.select_by_user_slug('rwubxbi8')
>>> survey
<Survey: "vk6cwyjb">
>>>
根据Heroku日志,这是发生问题的查询。
这是完整的Heroku日志:
修改:
根据要求,以下是发生错误的代码:
@classmethod
def select_by_user_slug(cls, slug):
"""Return the survey that contains the given user slug.
:param slug: The user slug stored within a survey.
:return: The survey containing the user slug."""
return cls.query.filter(cls._user_slugs.contains(slug)).first_or_404()
同样,代码在本地可以正常运行,并且在Flask shell中执行完全相同的方法也可以。
编辑2 :
好的,只需再次尝试,使用完全相同的URL,就可以了。尝试使用可以返回相同调查结果的其他URL也是可以的。
但我想防止这种情况再次发生。这发生在应用程序的两个阶段。当它一次发生时,我尝试了一个测试阶段和一个生产阶段,而这两个阶段都发生了。
如果有人知道为什么会发生这种情况,我将不胜感激。