【发布时间】:2018-06-09 06:40:09
【问题描述】:
我一直在关注这个 http://channels.readthedocs.io/en/latest/getting-started.html
我当前的设置(在添加频道之前)是 nginx、uwsgi、django。
在我的本地,我在转发端口 5000 的 vagrant box 上运行所有这些
Django 服务器当前运行在 0.0.0.0:5000
我的 nginx 配置监听 8000 并提供静态文件
它还有:
location / {
include uwsgi_params;
uwsgi_pass unix:{{backend_uwsgi_socket}};
}
按照教程,一切正常,直到我改变我的 settings.py
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgiref.inmemory.ChannelLayer",
"ROUTING": "myapp.routing.channel_routing",
},
}
到
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
#"hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
#"hosts": [("redis-server-name", 6379)],
"hosts": [("localhost", 6379)],
},
"ROUTING": "myapp.routing.channel_routing",
},
}
所以教程说要安装redis-server,然后再次运行命令:
manage.py runserver 0.0.0.0:80000
如果我关闭 nginx,然后运行它会报错:
ConnectionError:连接到 localhost:6379 时出现错误 111。连接被拒绝。
我尝试在我的 nginx 服务器块中为此端口添加一个侦听器,然后我收到以下错误:
^Cvagrant@vagrant-ubuntu-trusty-64:/srv/myproj/backend$ sudo python manage.py runserver 0.0.0.0:8000
正在执行系统检查...
系统检查未发现任何问题(0 静音)。
2017 年 12 月 28 日 - 17:10:25
Django 1.10 版,使用设置'backend.settings'
在 http://0.0.0.0:8000/
启动 Channels 开发服务器 通道层默认 (asgi_redis.core.RedisChannelLayer)
使用 CONTROL-C 退出服务器。
2017-12-28 17:10:25,883 - 信息 - 工作人员 - 监听通道 http.request、websocket.connect、websocket.disconnect、websocket.receive
线程 Thread-1 中的异常:
回溯(最近一次通话最后一次):
文件“/usr/lib/python2.7/threading.py”,第 810 行,在 __bootstrap_inner
self.run()
文件“/usr/local/lib/python2.7/dist-packages/channels/management/commands/runserver.py”,第 176 行,运行中
worker.run()
运行中的文件“/usr/local/lib/python2.7/dist-packages/channels/worker.py”,第 87 行
频道,内容 = self.channel_layer.receive_many(channels, block=True)
文件“/usr/local/lib/python2.7/dist-packages/asgiref/base_layer.py”,第 43 行,receive_many
返回 self.receive(通道,块)
文件“/usr/local/lib/python2.7/dist-packages/asgi_redis/core.py”,第 168 行,在接收
结果 = connection.blpop(list_names, timeout=self.blpop_timeout)
文件“/usr/local/lib/python2.7/dist-packages/redis/client.py”,第 1269 行,在 blpop
return self.execute_command('BLPOP', *keys)
文件“/usr/local/lib/python2.7/dist-packages/redis/client.py”,第 668 行,在 execute_command
return self.parse_response(connection, command_name, **options)
文件“/usr/local/lib/python2.7/dist-packages/redis/client.py”,第 680 行,在 parse_response
响应 = 连接.read_response()
文件“/usr/local/lib/python2.7/dist-packages/redis/connection.py”,第 624 行,在 read_response
响应 = self._parser.read_response()
文件“/usr/local/lib/python2.7/dist-packages/redis/connection.py”,第 292 行,在 read_response
(str(byte), str(response)))
InvalidResponse:协议错误:
打印出来后,它只是不断地打印以下消息:
错误 - 服务器 - 尝试接收消息时出错:协议错误:
我正在努力寻找答案,并且在学习了一些不同的教程/示例后让自己感到困惑。
我知道我错过了一些明显的东西,或者误解了一些东西。
任何指点或帮助将不胜感激。
【问题讨论】:
-
我一发布这个,我就在想“redis-server 正在运行吗?”.. 我运行了它......这一切都再次起作用了。感觉本教程遗漏了一些重要内容。
标签: django nginx redis django-channels