Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django channels would not start redis server using CHANNEL_LAYERS

I am trying to replicate Mikhail Andreev chat with Django channels posted here: https://gearheart.io/blog/creating-a-chat-with-django-channels/

and when I run the server: $ python3 ./manage.py runserver the redis server does not start. Here is the full message:

 Performing system checks...

 System check identified no issues (0 silenced).
 April 27, 2017 - 20:59:01
 Django version 1.10.3, using settings 'multichat.settings'
 Starting Channels development server at http://127.0.0.1:8000/
 Channel layer default (asgi_redis.core.RedisChannelLayer)
 Quit the server with CONTROL-C.
 2017-04-27 20:59:01,278 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.receive
 2017-04-27 20:59:01,279 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.receive
 2017-04-27 20:59:01,282 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.receive
 2017-04-27 20:59:01,282 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.receive
 2017-04-27 20:59:01,283 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
 2017-04-27 20:59:01,283 - INFO - server - Using busy-loop synchronous mode on channel layer
 2017-04-27 20:59:01,284 - INFO - server - Listening on endpoint tcp:port=8000:interface=127.0.0.1
 2017-04-27 20:59:01,294 - ERROR - server - Error trying to receive messages: Error 61 connecting to localhost:6379. Connection refused.
 Exception in thread Thread-1:
 Traceback (most recent call last):
   File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 439, in connect
     sock = self._connect()
   File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 494, in _connect
     raise err
   File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 482, in _connect
     sock.connect(socket_address)
 ConnectionRefusedError: [Errno 61] Connection refused 

I can solve it by running redis server from a different terminal, however that is what Django Channels supposed to do in the settings:

redis_host = os.environ.get('REDIS_HOST', 'localhost')
# Channel layer definitions
# http://channels.readthedocs.org/en/latest/deploying.html#setting-up-
a-channel-backend
CHANNEL_LAYERS = {
    "default": {
        # This example app uses the Redis channel layer implementation asgi_redis
    "BACKEND": "asgi_redis.RedisChannelLayer",
    "CONFIG": {
        "hosts": [(redis_host, 6379)],
    },
   "ROUTING": "multichat.routing.channel_routing", # We will create it in a moment
    },
}

Appreciate any help and advice.

Many thanks!

like image 796
Shulman Avatar asked Oct 15 '25 03:10

Shulman


2 Answers

See https://github.com/django/daphne#http2-support

You should install Twisted pip install -U Twisted[tls,http2]

like image 51
loocao Avatar answered Oct 16 '25 15:10

loocao


Django Channels will not automatically start Redis. Redis is a separate service, which should be already running on your machine or elsewhere. Channels relies on Redis for its backend as message broker.

From Redis:

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.

You need to follow the Installation instructions for Redis and start it using:

$ /path/to/redis-server

Your Django app should also be properly configured to use Redis. You will also need asgi_redis package installed in your Python virtual environment, if you use one.

As you can see from the error messages you have pasted, Django Channels couldn't connect to localhost:6379, because Redis is likely not running.

2017-04-27 20:59:01,294 - ERROR - server - Error trying to receive messages: Error 61 connecting to localhost:6379. Connection refused. 
  Exception in thread Thread-1: 
  Traceback (most recent call last):
    File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 439, in connect 
      sock = self._connect() 
    File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 494, in _connect 
      raise err 
    File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 482, in _connect 
      sock.connect(socket_address) 
  ConnectionRefusedError: [Errno 61] Connection refused

UPDATE (2019-02-26):

asgi_redis package is for Channels 1.x, whereas for Channels 2.x, one will need channels_redis.

like image 39
Darkfish Avatar answered Oct 16 '25 16:10

Darkfish



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!