Je suis en mesure d'exécuter redis localement et tout fonctionne.
Cependant, lorsque je déploie à heroku, j'obtiens cette erreur:
Error 111 connecting to localhost:6379. Connection refused.
J'ai mis en place un Procfile avec ...
web: gunicorn odb.wsgi --log-file -
worker: python worker.py
J'ai un fichier worker.py ...
import os
import urlparse
from redis import Redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL')
if not redis_url:
raise RuntimeError('Set up Redis To Go first.')
urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(Host=url.hostname, port=url.port, db=0, password=url.password)
if __== '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
Une variable REDISTOGO_URL apparaît dans la configuration de heroku.
Redis to go est un add-on installé pour mon application.
REDISTOGO_URL doit-il être défini dans settings.py? Pourquoi heroku essaie-t-il de se connecter à l'hôte local alors qu'il n'est même pas défini dans worker.py?
Il s'est avéré que j'avais besoin de configurer de telles choses pour que cela fonctionne sur Heroku.
redis_url = os.getenv('REDISTOGO_URL')
urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(Host=url.hostname, port=url.port, db=0, password=url.password)
Peut-être pas directement lié à votre question mais je faisais face à la même erreur et il se trouve que sur mon système, le paquet redis-server n’était pas installé.
Le problème a été résolu avec Sudo apt-get install redis-server
La solution est Sudo apt-get install redis-server
. N'oubliez pas de démarrer votre service par Sudo service redis-server start
.__ et vous pouvez utiliser la commande Sudo service redis-server {start|stop|restart|force-reload|status}
comme référence.
Je faisais face à l'erreur même
Le serveur radis n'a peut-être pas été installé dans votre environnement
Sudo apt-get install redis-server
J'avais besoin de configurer des choses comme celle-ci dans settings.py
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",
},
}
Si vous utilisez Django_rq, une configuration comme celle-ci fonctionnera pour vous:
RQ_QUEUES = {
'default': {
'Host': 'localhost',
'PORT': '6379',
'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379'), # If you're
'DB': 0,
'DEFAULT_TIMEOUT': 480,
}
}
Cela fonctionnera dans votre environnement local et également sur Heroku!
L'erreur 111 est générée lorsque l'application ne parvient pas à contacter Redis. J'ai eu le même problème après le tutoriel Heroku Django Channels . Le fichier settings.py devrait se lire comme suit:
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [os.environ.get('REDISCLOUD_URL', 'redis://localhost:6379')],
},
"ROUTING": "chat.routing.channel_routing",
},
}
REDISCLOUD_URL
au lieu de REDIS_URL
.
Assurez-vous que Redis est installé sur le serveur Heroku.