Проблема с запуском сред ASGI при развертывании приложения Django Rest

Я разрабатываю приложение с использованием Django, я развернул его на Google Cloud Platform изначально с использованием среды WSGI, теперь я добавил в приложение и использовал каналы, из-за которых мне нужно перейти с WSGI на ASGI, но при развертывании возникают ошибки в Google Cloud Platform, когда я использую среду ASGI

Я получил ошибку: respiter = self.wsgi (Environment, resp.start_response) TypeError: __call __ () принимает 2 позиционных аргумента, но было дано 3

Я прокомментировал все содержимое файла WSGI, когда хочу использовать среду ASGI, вот связанный со мной код:

ФАЙЛ ASGI:

import os
import django
from channels.routing import get_default_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Frames.settings')
django.setup()
application = get_default_application()

ФАЙЛ WSGI (который я прокомментировал):

"""
WSGI config for Frames project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/


import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Frames.settings')

application = get_wsgi_application()"""

main.py:

from Frames.asgi import application
app = application

Settings.py (Основные изменения, и я удалил все WSGI, связанные с settings.py)


ASGI_APPLICATION = "Frames.routing.application"

CHANNEL_LAYERS={
    "default":{
      "BACKEND": "channels_redis.core.RedisChannelLayer",
      "CONFIG": {
                "hosts": [("localhost", 6379)],
            },
    },
}

Как я могу запустить среду ASGI? Если я что-то пропустил при показе своего кода, я также могу показать это, я не могу понять, в чем проблема. Правильный ли мой способ развертывания приложения ASGI?


person Nabeel Ayub    schedule 30.12.2019    source источник
comment
Как у вас работает приложение? Какой у вас entrypoint?   -  person Iain Shelvington    schedule 30.12.2019
comment
Он автоматически загружается из файла main.py, о котором я упоминал, где он вызывает файл ASGI (который является точкой входа)   -  person Nabeel Ayub    schedule 30.12.2019
comment
После того, как вы прокомментировали все из WSGI, у вас все еще возникает ошибка респиратора? Или какая ошибка возникает после комментирования всего WSGI?   -  person Stefan Neacsu    schedule 30.12.2019
comment
Только ошибка респиратора, которую я получил   -  person Nabeel Ayub    schedule 30.12.2019


Ответы (1)


Стандарт App Engine в настоящее время не поддерживает ASGI.

Для работы с ASGI вы должны использовать App Engine Flexible, где вы можете гораздо больше настраивать среду.

Затем вам может быть полезно руководство в документации GAE flex по Создание постоянных подключений с помощью WebSockets.

person Juancki    schedule 08.01.2020