为什么我的Posgres连接在Heroku上关闭?

时间:2019-05-26 01:09:17

标签: postgresql heroku flask

我正在使用已部署到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日志:

https://pastebin.com/m1GQgEeX

修改

根据要求,以下是发生错误的代码:

    @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也是可以的。

但我想防止这种情况再次发生。这发生在应用程序的两个阶段。当它一次发生时,我尝试了一个测试阶段和一个生产阶段,而这两个阶段都发生了。

如果有人知道为什么会发生这种情况,我将不胜感激。

0 个答案:

没有答案