Django // Daphne 500 ошибка на все запросы после обновления версии "TypeError: object HttpResponse can't be used in 'await' expression"

У меня проблема, когда я получаю 500 ответов после обновления Django с версии 3.1.13 до 3.2.8.

Проблема не возникала на предыдущей версии Django, и она возникает только если включены и приложение Django Channels, и промежуточное ПО OpenCensus в settings.py.

Я буду очень признателен, если кто-нибудь поможет проверить, что мои asgi.py и settings.py настроены правильно, или определить зависимость, вызывающую проблему, чтобы я мог проследить и поднять ошибку.

Репо, воспроизводящее проблему

https://github.com/oscarhermoso/bug-opentelemetry-django-asgi

Ошибка Daphne, как она отображается в браузере

500 Внутренняя ошибка сервера

Исключение внутри приложения.
Дафна

ASGI точка входа

# testproject/asgi.py

import os

from django.core.asgi import get_asgi_application

# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings')

from channels.auth import AuthMiddlewareStack  # noqa
from channels.routing import ProtocolTypeRouter, URLRouter  # noqa

import testproject.routing  # noqa

application = ProtocolTypeRouter({
    # Django's ASGI application to handle traditional HTTP requests
    "http": get_asgi_application(),

    # WebSocket chat handler
    "websocket": AuthMiddlewareStack(
        URLRouter(
            testproject.routing.websocket_urlpatterns
        )
    ),
})

Установленные приложения и промежуточное ПО

# settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'channels'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'opencensus.ext.django.middleware.OpencensusMiddleware'
]

Дамп ошибок

Ну, я все еще ищу решение. Но после некоторых исследований я обнаружил, что существует проблема с get_asgi_application.

Я читал, что протокол HTTP добавляется Django по умолчанию, и по этой причине нам не нужна эта строка. После удаления "http": get_asgi_application(), сайт стал работать хорошо.

Здесь есть человек, который говорит об этом: https://djangokatya.wordpress.com/2020/10/26/500-internal-server-error-daphne-http-processing-error/

В любом случае, в документации Channels V3 они явно просят добавить "http": get_asgi_application(),... Не знаю, как это работает без него, но у меня работает.

Проблема в следующем: после этого я начал получать ошибку в Daphne: ValueError: HTTP response has not yet been started but got http.response.body. Не могу хорошо понять, что происходит до сих пор.

Вернуться на верх