4

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!

1

4 Answers 4

8

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

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

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks - I just did. Still getting the error: 2017-04-28 03:22:51,862 - ERROR - server - Error trying to receive messages: Error 61 connecting to localhost:6379. Connection refused. Exception in thread Thread-5: Traceback (most recent call last): File "/usr/local/lib/python3.6/site-packages/redis/connection.py", line 439, in connect sock = self._connect()
2

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.

Comments

1

I think you have installed redis channel in virtualenv. I was facing the same issue then I have installed redis in my local too and then it works fine. You will see the Services(local) find there Redis Server.

For redis installation, you can follow this link for ubuntu: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04

Comments

0

You should install redis first. I did it on MacOS This tutorial for Mac

  • Go to https://brew.sh, install brew.
  • Then in Terminal `brew install redis
  • brew services start redis

For windows to start the Redis Server:

  • install redis from here https://github.com/rgl/redis/downloads
  • open task manager and go to services
  • in services find redis
  • right click on redis and choose open services
  • a window will pop and you will see the Services(local) find there Redis Server
  • now click on start

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.