Почему мое соединение с Posgres отключается от Heroku? - PullRequest
0 голосов
/ 26 мая 2019

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

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

Если я войду в оболочку bash с помощью heroku run bash и войду в оболочку Flask, я смогу выполнить тот же запрос без проблем.

$ 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 также работает.

Редактировать 2 :

ОК, просто попробовал еще раз, тот же URL, и это сработало. Пробовал с другим URL, который вернул бы тот же опрос, который также работал.

Но я бы хотел предотвратить это снова. Это произошло на двух этапах приложения. Когда это случилось на одном, я попробовал на стадии тестирования и производства, и это произошло на обоих.

Если у кого-нибудь есть идея, почему это произошло, я буду признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...