首页 > 解决方案 > 无法导入 BACKEND 'channels_redis.core.RedisChannelLayer' Django Channels 2.1.2

问题描述

我有一个Django项目,它有多个应用程序并Django Channels 2.1.2用于其 WebSockets 功能(用于通知和聊天消息)。

当我跑daphne -b 127.0.0.1 -p 8000 myproject.asgi:application

我得到错误

'ERROR Exception inside application: Cannot import BACKEND 'channels_redis.core.RedisChannelLayer' specified for default`

回溯如下

127.0.0.1:59202 - - [25/Apr/2019:10:23:09] "WSDISCONNECT /messages/bob" - -
127.0.0.1:59215 - - [25/Apr/2019:10:23:11] "WSCONNECTING /messages/bob" - -
2019-04-25 10:23:11,952 ERROR    Exception inside application: Cannot import BACKEND 'channels_redis.core.RedisChannelLayer' specified for default
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/sessions.py", line 175, in __call__
    return await self.inner(receive, self.send)
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/middleware.py", line 41, in coroutine_call
    await inner_instance(receive, send)
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/consumer.py", line 42, in __call__
    self.channel_layer = get_channel_layer()
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/layers.py", line 344, in get_channel_layer
    return channel_layers[alias]
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/layers.py", line 76, in __getitem__
    self.backends[key] = self.make_backend(key)
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/layers.py", line 46, in make_backend
    return self._make_backend(name, config)
  File "/Users/me/myapp/lib/python3.7/site-packages/channels/layers.py", line 69, in _make_backend
    "Cannot import BACKEND %r specified for %s" % (self.configs[name]["BACKEND"], name)
  Cannot import BACKEND 'channels_redis.core.RedisChannelLayer' specified for default

我激活了一个虚拟环境,并且一切都已正确安装。

settings.py(基础文件)

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

routing.py(与 位于同一层settings.py

from django.conf.urls import url
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator, OriginValidator

from chat.consumers import ChatConsumer

application = ProtocolTypeRouter({
    'websocket': AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                [
                    # below is our websocket URL
                    url(r"^messages/(?P<username>[\w.@+-]+)", ChatConsumer),
                ]
            )
        )
    )
})

base.py

我很乐意加入consumers.pybase.py如果它是相关的。

标签: pythondjangowebsocketdjango-channels

解决方案


推荐阅读