#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 исправило это