Ошибка 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 запущен и работает, и простая перезагрузка приложения может решить проблему ИЛИ, как указали другие ответы, обновите приложение соответствующим образом, чтобы обновить и повторно использовать переменную среды.