Я работаю с веб-приложением 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, который вернул бы тот же опрос, который также работал.
Но я бы хотел предотвратить это снова. Это произошло на двух этапах приложения. Когда это случилось на одном, я попробовал на стадии тестирования и производства, и это произошло на обоих.
Если у кого-нибудь есть идея, почему это произошло, я буду признателен.