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
. Не могу хорошо понять, что происходит до сих пор.