python - 无法导入 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.py
,base.py
如果它是相关的。
解决方案
推荐阅读
- swift - 我无法在 ViewController 中将标签连接为插座
- vue.js - 按 2 个或更多字段过滤 BootstrapVue 表
- shopify - 是否可以在 Shopify 产品页面上使用替代文本添加视频
- scala - Spark SQL first 和 last 聚合函数——意外结果
- c - 我对变量的赋值和 While 函数有疑问
- python - 导入和名称绑定最佳实践
- ios - 将带有源的 Pod 依赖项添加到 .podspec
- azure - Use-AzureSqlJobConnection -CurrentAzureSubscription 时出错
- html - 无法将元素缩放到 100% 宽度
- javascript - Angular 2+ how to get focus to modal inputs on opening the modal?