2016-03-18 22 views
10

Sono in grado di eseguire redis localmente e tutto funziona.Errore 111 connessione a localhost: 6379. Connessione rifiutata. Django Heroku

Tuttavia quando schiero a Heroku ottengo questo errore:

Error 111 connecting to localhost:6379. Connection refused. 

Ho creato un Procfile con ...

web: gunicorn odb.wsgi --log-file - 
worker: python worker.py 

Ho un file 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 __name__ == '__main__': 
with Connection(conn): 
    worker = Worker(map(Queue, listen)) 
    worker.work() 

Una variabile REDISTOGO_URL appare nella configurazione di heroku.

Redis to go è un componente aggiuntivo installato per la mia app.

REDISTOGO_URL deve essere definito in settings.py? Perché heroku sta tentando di connettersi all'host locale quando non è nemmeno definito in worker.py?

+0

puoi non solo passare il 'redis_url' direttamente a Redis, senza analizzarlo? Abbastanza sicuro che funzioni. –

+0

Ci riproverò. Non sembrava funzionare la prima volta. –

risposta

1

È venuto fuori che avevo bisogno di impostare cose come questa affinché funzionasse su 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) 
0

Se si utilizza django_rq, una configurazione come questo lavoro per voi:

RQ_QUEUES = { 
    'default': { 
     'HOST': 'localhost', 
     'PORT': '6379', 
     'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379'), # If you're 
     'DB': 0, 
     'DEFAULT_TIMEOUT': 480, 
    } 
} 

Farà che i lavori per l'ambiente locale e anche su Heroku!

19

Potrebbe non essere direttamente correlato alla domanda, ma stavo affrontando lo stesso errore e risulta che sul mio sistema il pacchetto redis-server non è stato installato.

problema è stato risolto con sudo apt-get install redis-server

+1

ha funzionato per me :) – fanny

0

errore 111 viene generata quando l'applicazione è in grado di contattare Redis. Ho avuto lo stesso problema seguendo il tutorial Heroku Django Channels. Il file settings.py dovrebbe leggere:

CHANNEL_LAYERS = { 
    "default": { 
     "BACKEND": "asgi_redis.RedisChannelLayer", 
     "CONFIG": { 
      "hosts": [os.environ.get('REDISCLOUD_URL', 'redis://localhost:6379')], 
     }, 
     "ROUTING": "chat.routing.channel_routing", 
    }, 
} 

REDISCLOUD_URL invece di REDIS_URL.

Verificare che Redis sia installato sul server Heroku.

1

La soluzione è sudo apt-get install redis-server. Non dimenticare di avviare il servizio da parte sudo service redis-server start e si può utilizzare il comando sudo service redis-server {start|stop|restart|force-reload|status} di riferimento

+1

Si prega di vedere questo primo [how-to-answer] (https://stackoverflow.com/help/how-to-answer) Questa domanda viene data risposta prima, ovviamente, è possibile aggiungere la tua risposta qui. Ma devi capire alcuni punti prima di rispondere. Innanzitutto, non aggiungere una risposta che è stata precedentemente aggiunta con lo stesso codice o suggerimento. In secondo luogo, non aggiungere una risposta eccessivamente complicata se l'utente ha chiesto in modo molto specifico il problema e di cosa ha bisogno per risolverlo. Terzo, puoi aggiungere un commento se vuoi suggerire qualcosa riguardo la risposta o la domanda. –

+0

Mi dispiace per qualsiasi inconveniente. Sono una matricola nello stackoverflow. Sarò più attento, grazie ~ –

0

stavo affrontando stesso l'errore

  • Forse Radis server non è stato installato nel proprio ambiente

    sudo apt-get install redis-server

  • Avevo bisogno di impostare cose come questa nelle impostazioni.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", 
        }, 
    } 
    
  • Prima enter image description here

  • Dopo enter image description here

Problemi correlati