Django频道使用redis-server和nginx

时间:2017-12-28 17:57:31

标签: django nginx redis django-channels

我一直在关注此事 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.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:错误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>


我正在努力寻找这方面的答案,并且在一些不同的教程/示例之后让我感到困惑。
我知道这将是我错过了一些明显的东西,或者误解了一些东西。

非常感谢任何指示或帮助。

1 个答案:

答案 0 :(得分:0)

  

ConnectionError:错误111连接到localhost:6379。连接被拒绝。

6379是应该运行redis服务器的端口。你不应该配置nginx来监听它。

您发布的堆栈跟踪意味着django服务器正在尝试连接到redis(端口6379)并且它不喜欢响应(因为nginx在那里监听,而不是redis)。