我一直在关注此事 http://channels.readthedocs.io/en/latest/getting-started.html
我目前的设置(添加频道之前)是nginx,uwsgi,django。
在我的本地,我在一个转发端口5000的流浪盒上运行所有这些
Django服务器目前运行在0.0.0.0:5000
我的nginx配置监听8000并提供静态文件
它还有:
location / {
include uwsgi_params;
uwsgi_pass unix:{{backend_uwsgi_socket}};
}
在学习本教程之后,一切正常,直到我从
更改settings.pyCHANNEL_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:错误111连接到localhost:6379。连接被拒绝。
我尝试在我的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/启动频道开发服务器 渠道层默认(asgi_redis.core.RedisChannelLayer)
使用CONTROL-C退出服务器 2017-12-28 17:10:25,883 - INFO - worker - 听取频道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行,在运行中
channel,content = 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行,收到
result = connection.blpop(list_names,timeout = self.blpop_timeout)
文件" /usr/local/lib/python2.7/dist-packages/redis/client.py",第1269行,在blpop中 返回self.execute_command(' BLPOP',*键)
文件" /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中 response = connection.read_response()
文件" /usr/local/lib/python2.7/dist-packages/redis/connection.py",第624行,在read_response中 response = self._parser.read_response()
文件" /usr/local/lib/python2.7/dist-packages/redis/connection.py",第292行,在read_response中 (str(byte),str(response)))
InvalidResponse:协议错误:<,html>
打印完毕后,它会不断打印以下信息:
错误 - 服务器 - 尝试接收邮件时出错:协议错误:<,html>
我正在努力寻找这方面的答案,并且在一些不同的教程/示例之后让我感到困惑。
我知道这将是我错过了一些明显的东西,或者误解了一些东西。
非常感谢任何指示或帮助。
答案 0 :(得分:0)
ConnectionError:错误111连接到localhost:6379。连接被拒绝。
6379是应该运行redis服务器的端口。你不应该配置nginx来监听它。
您发布的堆栈跟踪意味着django服务器正在尝试连接到redis(端口6379)并且它不喜欢响应(因为nginx在那里监听,而不是redis)。