Мы находимся в процессе миграции с 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")})
Я пробовал эти подходы и не смог устранить ошибку:
Как упоминалось в общедоступном документе, у вас должен быть 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]
@hassansuhaib, вы пробовали спросить в сообществе django?
Это проблема с dev appserver, а не с django.
Согласно Google, devappserver не работает с python3.
Из вышесказанного я предполагаю, что вы работаете в Windows. Если да, то у нас есть патч , который заменяет Gunicorn (поскольку по умолчанию он не работает в Windows и используется dev_appserver.py) на Официантку при запуске с dev_appserver.py
в локальной среде (см. пост в сообществе Google Cloud)
Затем вы можете запускать свое приложение локально, не используя контейнеры докеров, и оно работает с пакетными API.
Спасибо чувак! Я видел ваш патч, но настаивал на запуске сервера внутри докера. Что касается: «Отметить для повторного использования существующей виртуальной среды», Google уже добавил эту функцию в последнюю версию Google Cloud SDK, поэтому вы можете обновить свой патч.
У меня была такая же проблема, и в моем случае это было вызвано доступом к веб-сайту через неправильный порт.
При запуске 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 и все работает корректно.
Я уже пробовал это, это не работает. Фактически, я исчерпал все ресурсы, даже ChatGPT, и проблема все еще существует.