Ошибка Bad Gateway 502 при обновлении приложения с Python 3.7 на Python 3.8

#python-3.x #google-app-engine

#python-3.x #google-app-engine

Вопрос:

После успешного переноса с Python 2.7 на 3.7 в Google App Engine я решил попробовать перейти на Python 3.8 runtime.

Единственными изменениями, которые я внес в конфигурацию с Python 3.7, было указание среды выполнения python38 в файле app.yaml и добавление google-cloud-datastore в requirements.txt

Когда я развертываю и запускаю среду выполнения приложения, я получаю Bad Gateway 502 (nginx). Ниже приведен журнал stderr:

 Traceback (most recent call last):
  File "/layers/google.python.webserver/gunicorn/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/layers/google.python.webserver/gunicorn/gunicorn/workers/gthread.py", line 92, in init_process
    super().init_process()
  File "/layers/google.python.webserver/gunicorn/gunicorn/workers/base.py", line 119, in init_process
    self.load_wsgi()
  File "/layers/google.python.webserver/gunicorn/gunicorn/workers/base.py", line 144, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/layers/google.python.webserver/gunicorn/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/layers/google.python.webserver/gunicorn/gunicorn/app/wsgiapp.py", line 49, in load
    return self.load_wsgiapp()
  File "/layers/google.python.webserver/gunicorn/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/layers/google.python.webserver/gunicorn/gunicorn/util.py", line 358, in import_app
    mod = importlib.import_module(module)
  File "/opt/python3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/srv/main.py", line 2, in <module>
    from google.cloud import ndb
  File "/layers/google.python.pip/pip/google/cloud/ndb/__init__.py", line 28, in <module>
    from google.cloud.ndb.client import Client
  File "/layers/google.python.pip/pip/google/cloud/ndb/client.py", line 26, in <module>
    from google.cloud.datastore_v1.gapic import datastore_client
ModuleNotFoundError: No module named 'google.cloud.datastore_v1.gapic'
  

Мой requirements.txt файл содержит следующее:

 googleapis_common_protos
google-cloud-ndb
google-cloud-datastore
Flask==0.10.1
  

Я не указываю точку входа в файл app.yaml. Согласно документам, нет необходимости включать gunicorn в requirments.txt в таком случае. Изначально у меня не была включена библиотека Google-cloud-datastore. Среде выполнения Python37 это не понадобилось. Похоже, ошибка во время выполнения python38 не имеет значения.

Как уже упоминалось, это отлично работает со средой выполнения python37.

Спасибо.

Ответ №1:

Похоже, это был

Flask == 0.10.1 in requirements.txt . Удалил спецификацию версии и удалил google-cloud-хранилище данных как избыточное.

Теперь все работает.

Извините, что побеспокоил вас этим. Но я думаю, что публикация вопроса помогла мне увидеть проблему с указанием старой версии flask.

С уважением, S

Комментарии:

1. Спасибо. Это спасло меня от возвращения приложения в Онлайн

2. На самом деле, спецификация версии не была проблемой. Основной проблемой было использование как облачного хранилища данных, так и облачной базы данных. Использование только cloud-ndb исправило это