Devappserver: попытка вызова RPC без активного билета безопасности

Мы находимся в процессе миграции с webapp2 на последнюю версию Django. Мы хотим пока продолжать использовать устаревшие сервисы, такие как Appengine NDB, прежде чем переходить на новейшие технологии.

Для локального запуска среды разработки я использую devappserver внутри среды докеров, потому что, согласно Google, devappserver не работает с python3.

Моя версия Google Cloud SDK внутри контейнера докеров: 424.0.0

Сервер работает, но я продолжаю получать эту ошибку всякий раз, когда пытаюсь получить доступ к представлению, которое использует какой-то устаревший сервис:

google.appengine.runtime.apiproxy_errors.RPCFailedError: Attempted RPC call without active security ticket

Журнал ошибок:

app.yaml (для развертывания выглядит так):

runtime: python38
instance_class: F2
app_engine_apis: 'True'

entrypoint: bash -c 'python3 manage.py migrate --settings=conf.settings.dev --noinput && gunicorn -b :$PORT main:app'

handlers:
- url: /static
  static_dir: static/

- url: /.*
  script: auto
  secure: always
  redirect_http_response_code: 301

builtins:
  - deferred: on


env_variables:
  DEBUG: 'False'
  DB_HOST: 
  DB_PORT:
  DB_NAME: 
  DB_USER: 
  DB_PASSWORD: 
  DJANGO_SETTINGS_MODULE: conf.settings.dev

main.py:

from conf.wsgi import application
from google.appengine.api import wrap_wsgi_app

app = wrap_wsgi_app(application, use_legacy_context_mode=True, use_deferred=False)

Приложение django работает должным образом при развертывании в стандартной среде AppEngine. Нет ошибок при локальном запуске служб внутри контейнеров докеров.

Пакет, который я использую для устаревшей службы, связанной с ядром приложения: Legacy Bundled Services

Пример просмотра:

from django.views import View
from django.http import JsonResponse

from google.appengine.api import memcache

class UserView(View):
    def get(self, request):
        memcache.set("Globe", "Jupiter")
        return JsonResponse({'hello': memcache.get("Globe")})

Я пробовал эти подходы и не смог устранить ошибку:

  • Пытался создать файл appengine_config.py, но, видимо, это не работает.
  • Создал промежуточное программное обеспечение для использования AppEngine NDB, используя это промежуточное программное обеспечение в качестве основы (пришлось обновить его, поскольку последний django не использует MIDDLEWARE_CLASSES): google.appengine.ext.ndb.django_middleware.NdbDjangoMiddleware.
  • Выполнена аутентификация с использованием gcloud auth activ-service-account --key-file=/app/conf/gcp_credentials.json и установка идентификатора проекта
  • Настройка этой среды: GOOGLE_CLOUD_PROJECT
  • Попытался создать отдельный контейнер в докере, используя старый облачный SDK Google, например 183.0.0, для использования эмулятора хранилища данных.
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
128
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как упоминалось в общедоступном документе, у вас должен быть Python 2 интерпретатор версии 2.7.12 или новее, независимо от языков, используемых в вашем приложении для запуска dev_appserver инструментов.

Важно: для запуска инструмента dev_appserver.py на вашем компьютере должен быть установлен интерпретатор Python 2 версии 2.7.12 или новее (даже если ваше приложение написано на другом языке или версии, включая Python 3).

Инструмент dev_appserver не поддерживает разработку приложений Python 3 в Windows.

Вы должны запустить следующую команду, чтобы убедиться, что интерпретатор Python 2 используется.

dev_appserver.py --runtime_python_path = "python27=/usr/bin/python2.7,python3=/usr/bin/python3" [PATH_TO_YOUR_APP]

Я уже пробовал это, это не работает. Фактически, я исчерпал все ресурсы, даже ChatGPT, и проблема все еще существует.

hassansuhaib 03.04.2023 11:40

@hassansuhaib, вы пробовали спросить в сообществе django?

Roopa M 03.04.2023 16:03

Это проблема с dev appserver, а не с django.

hassansuhaib 04.04.2023 07:51
Ответ принят как подходящий

Согласно Google, devappserver не работает с python3.

Из вышесказанного я предполагаю, что вы работаете в Windows. Если да, то у нас есть патч , который заменяет Gunicorn (поскольку по умолчанию он не работает в Windows и используется dev_appserver.py) на Официантку при запуске с dev_appserver.py в локальной среде (см. пост в сообществе Google Cloud)

Затем вы можете запускать свое приложение локально, не используя контейнеры докеров, и оно работает с пакетными API.

Спасибо чувак! Я видел ваш патч, но настаивал на запуске сервера внутри докера. Что касается: «Отметить для повторного использования существующей виртуальной среды», Google уже добавил эту функцию в последнюю версию Google Cloud SDK, поэтому вы можете обновить свой патч.

hassansuhaib 04.04.2023 08:20

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

При запуске dev_appserver.py появляется множество консольных сообщений, которые прокручиваются во время его запуска. В конце он напечатает что-то вроде:

                                                                                               
INFO     2023-04-13 00:44:31,949 dispatcher.py:276] Starting module "default" running at: http://0.0.0.0:8080
INFO     2023-04-13 00:44:31,950 admin_server.py:70] Starting admin server at: http://localhost:8000
INFO     2023-04-13 00:44:32,955 instance.py:561] Cannot decide GOOGLE_CLOUD_PROJECT, using "test" as a fake value
[2023-04-13 12:44:33 +1200] [17518] [INFO] Starting gunicorn 20.1.0
[2023-04-13 12:44:33 +1200] [17518] [INFO] Listening at: http://0.0.0.0:42919 (17518)
[2023-04-13 12:44:33 +1200] [17518] [INFO] Using worker: sync
[2023-04-13 12:44:33 +1200] [17520] [INFO] Booting worker with pid: 17520

Там несколько разных номеров портов. 8080, 8000, 42919. Я заходил на сайт по адресу http://0.0.0.0:42919, вроде работает - простые страницы загружаются нормально. Но как только вызываются функции memcache или хранилища данных, отображается сообщение об ошибке о вызове RPC.

Используйте http://0.0.0.0:8080 и все работает корректно.

Другие вопросы по теме