Django и uvicorn выбрасывают ошибки `closing handshake failed` при загрузке страницы

Я пытаюсь следовать некоторым руководствам по настройке сервера Django на Heroku и добавить вебсокеты для передачи информации на и с моих внешних страниц. Я думаю, что все сделал правильно, однако я получаю следующие ошибки, когда мой websocket на странице пытается подключиться:

5:06:07 PM web.1 |  [2021-10-26 21:06:07 +0000] [36593] [ERROR] Exception in ASGI application
5:06:07 PM web.1 |  Traceback (most recent call last):
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 203, in run_asgi
5:06:07 PM web.1 |      result = await self.app(self.scope, self.asgi_receive, self.asgi_send)
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
5:06:07 PM web.1 |      return await self.app(scope, receive, send)
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/channels/routing.py", line 74, in __call__
5:06:07 PM web.1 |      raise ValueError(
5:06:07 PM web.1 |  ValueError: No application configured for scope type 'websocket'
5:06:07 PM web.1 |  [2021-10-26 21:06:07 +0000] [36593] [INFO] connection open
5:06:07 PM web.1 |  [2021-10-26 21:06:07 +0000] [36593] [ERROR] closing handshake failed
5:06:07 PM web.1 |  Traceback (most recent call last):
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/websockets/legacy/server.py", line 232, in handler
5:06:07 PM web.1 |      await self.close()
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/websockets/legacy/protocol.py", line 779, in close
5:06:07 PM web.1 |      await asyncio.shield(self.close_connection_task)
5:06:07 PM web.1 |    File "/Users/bslaght/Library/Python/3.8/lib/python/site-packages/websockets/legacy/protocol.py", line 1309, in close_connection
5:06:07 PM web.1 |      self.transport.write_eof()
5:06:07 PM web.1 |    File "uvloop/handles/stream.pyx", line 696, in uvloop.loop.UVStream.write_eof
5:06:07 PM web.1 |    File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
5:06:07 PM web.1 |  RuntimeError: unable to perform operation on <TCPTransport closed=True reading=False 0x7fde634a6c30>; the handler is closed

Я пробовал искать эти ошибки везде, но безрезультатно. Я предполагаю, что у меня просто где-то не хватает файла. Это мой первый раз, когда я использую Heroku и Django. Вот другие соответствующие части моего приложения:

Страница:

<script language="javascript">
    var prefix = (window.location.protocol == 'https:') ? 'wss://' : 'ws://';
    var ws_url = prefix + window.location.host + '/ws/ticks/';
    var chatSocket = new ReconnectingWebSocket(ws_url);
    chatSocket.onmessage = function(event) {
        var data = JSON.parse(event.data);
        console.log('data', data);
    };
</script>

routing.py

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import chat.routing

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns
        )
    ),
})

asgi.py

import os

from channels.routing import ProtocolTypeRouter
from django.core.asgi import get_asgi_application

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

application = ProtocolTypeRouter({
    "http": get_asgi_application()
})

settings.py

ASGI_APPLICATION = "twitch_chess.asgi.application"

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

CHANNEL_GROUP_NAME = 'chat'

требования:

django
django-heroku
gunicorn
uvicorn[standard]
requests
channels
channels-redis
Вернуться на верх