rq в Docker: «Не удалось разрешить соединение Redis» с другим работающим соединением Redis - PullRequest
0 голосов
/ 21 сентября 2019

Я чувствую, что делаю то, на что есть ответы на каждый другой вопрос.Но я не могу получить приложение Flask, использующее rq для успешного подключения к redis, несмотря на успешное подключение к redis с использованием чистого экземпляра Redis.

В коде моего приложения из webservice:

from rq import Queue
from rq import Queue
from redis import Redis

redis = Redis(host="redis", db=0, socket_connect_timeout=10, socket_timeout=10)

# ...

        visits = redis.incr("counter")
        print(f"visits: {visits}")

        q = Queue(redis);
        q.enqueue(my_worker.work)

и журналы:

visits: 11
rq.connections.NoRedisConnectionException: Could not resolve a Redis connection

Счетчик visits работает правильно, поэтому очевидно, что имеется работающее соединение Redis.И все же экземпляр Queue не может его использовать.Нет разницы, если я инициализирую отдельный экземпляр Redis для Queue (или оставляю счетчик полностью).

Я запускаю этот стек, используя docker stack deploy с docker-compose.yml, который неслишком изменено из учебника для начинающих:

version: "3"
services:
  web:
    image: ozydingo/workers-web:latest
    deploy: #...
    ports:
      - "80:80"
    networks:
      - webnet
  worker:
    image: ozydingo/workers-worker:latest
    deploy: #...
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - "/home/docker/data:/data"
    deploy: #...
    networks:
      - webnet
#...
networks:
  webnet:

Как мне интерпретировать ошибку из Queue, утверждающую, что не может быть разрешено соединение Redis, когда мой экземпляр redis говорит мне об обратном?

1 Ответ

1 голос
/ 22 сентября 2019

Если я принимаю как должное, что официальная документация должна соблюдаться, правильный синтаксис для создания объекта очереди:

my_queue = Queue(connection=my_redis_connection_object)

Поэтому измените вашу строку

# /!\ Wrong /!\
q = Queue(redis)

к следующему

q = Queue(connection=redis)

-

Дополнительное примечание: не имеет отношения к вашей проблеме, но у вас есть дубликат импорта для Queue вверху файла.

...