Estoy tratando de replicar el chat de Mikhail Andreev con los canales de Django publicados aquí:https://gearheart.io/blog/creating-a-chat-with-django-channels/
y cuando ejecuto el servidor: $ python3 ./manage.py runserver el servidor redis no se inicia. Aquí está el mensaje completo:
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 refusedPuedo resolverlo ejecutando el servidor redis desde una terminal diferente, sin embargo, eso es lo que se supone que deben hacer Django Channels en la configuración:
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 }, }Agradezco cualquier ayuda y consejo.
¡Muchas gracias!
Consulte https://github.com/django/daphne#http2-support
Debes instalar Twisted pip install -U Twisted[tls,http2]
Django Channels no iniciará automáticamente Redis. Redis es un servicio separado, que ya debería estar ejecutándose en su máquina o en otro lugar. Channels confía en Redis para su backend como intermediario de mensajes.
De Redis :
Redis es un almacén de estructura de datos en memoria de código abierto (con licencia BSD), que se utiliza como base de datos, caché y agente de mensajes.
Debe seguir las instrucciones de instalación para Redis e iniciarlo usando:
$ /path/to/redis-serverSu aplicación Django también debe estar configurada correctamente para usar Redis . También necesitará el paquete asgi_redis instalado en su entorno virtual de Python , si usa uno.
Como puede ver en los mensajes de error que ha pegado, Django Channels no pudo conectarse a localhost:6379, porque es probable que Redis no se esté ejecutando.
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
ACTUALIZACIÓN (2019-02-26) :
El paquete asgi_redis es para los canales 1.x , mientras que para los canales 2.x , se necesitaránchannels_redis.
Creo que has instalado el canal redis en virtualenv. Estaba enfrentando el mismo problema, luego instalé redis en mi local también y luego funciona bien. Verá que los Servicios (locales) se encuentran allí Redis Server.
Para la instalación de redis, puede seguir este enlace para ubuntu: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04