Ошибка 111, подключаемая к localhost: 6379. В соединении отказано. Django Heroku

Я могу запустить redis локально, и все работает.

Однако, когда я развертываю в heroku, я получаю эту ошибку:

Error 111 connecting to localhost:6379. Connection refused. 

Я установил Procfile с...

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

У меня есть файл 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()

В конфигурации heroku появляется переменная REDISTOGO_URL.

Redis to go - это установленное дополнение для моего приложения.

Должен ли REDISTOGO_URL быть определен в settings.py? Почему герой пытается подключиться к локальному хосту, когда он даже не определен в worker.py?

Ответ 1

Оказывается, мне нужно было настроить такие вещи, чтобы он работал на 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

Возможно, это не связано напрямую с вашим вопросом, но я столкнулся с той же ошибкой, и оказалось, что на моей системе не был установлен пакет redis-server.

Проблема была решена с,

Ubuntu: sudo apt-get install redis-server

Cent OS: sudo yum install redis

Ответ 3

Решение sudo apt-get install redis-server. Не забудьте запустить сервис sudo service redis-server start и вы можете использовать команду sudo service redis-server {start|stop|restart|force-reload|status} для справки

Ответ 4

Я столкнулся с такой же ошибкой

  • Возможно, сервер radis не был установлен в вашей среде

    sudo apt-get install redis-server

  • Мне нужно было настроить такие вещи в 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",
        },
    }
    
  • Перед введите описание изображения здесь

  • После введите описание изображения здесь

Ответ 5

Если вы используете django_rq, такая конфигурация будет работать для вас:

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

Это сделает эту работу в вашей локальной среде, а также на Heroku!

Ответ 6

Ошибка 111 возникает, когда приложение не может связаться с Redis. У меня была такая же проблема после учебника Heoku Django Channels. Файл settings.py должен выглядеть следующим образом:

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

REDISCLOUD_URL вместо REDIS_URL.

Убедитесь, что Redis установлен на сервере Heroku.

Ответ 7

Я также приземлился здесь со следующей проблемой.

Trying again in 2.00 seconds...

[2019-06-10 07:25:48,432: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 4.00 seconds...

[2019-06-10 07:25:52,439: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 6.00 seconds...

[2019-06-10 07:25:58,447: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 8.00 seconds...

Я понял, что проблема была UFW, который отрицает связи. Поэтому я разрешил подключения к этому порту с помощью следующей команды.

sudo ufw alloww 6379

Ответ 8

Это может произойти, когда какое-либо приложение, которое вызывает/подключается к redis, переменная окружения, которую она использовала для указания соединения, не была правильно установлена - REDISCLOUD_URL или REDISTOGO_URL и т.д. Это может быть проще всего, если redis был запущен после приложения или redis перезапустил и зациклил свое соединение IP и/или доступ. Таким образом, при развертывании страховка Redis запускается до нижестоящих приложений

Убедитесь, что Redis запущен и работает, и простая перезагрузка приложения может решить проблему ИЛИ, как указали другие ответы, обновите приложение соответствующим образом, чтобы обновить и повторно использовать переменную среды.