web-dev-qa-db-fra.com

Erreur 111 lors de la connexion à localhost: 6379. Connexion rejetée. Django Heroku

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? 

17
John Waller

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)
2
John Waller

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

37
shrishinde

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.

6
Deft-pawN

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",
        },
    }
    
  • Avant  enter image description here

  • Après  enter image description here

2
Mr Singh

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!

1
ruhanbidart

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.

0
Josh Laird