docker - Docker 中的 rq : "Could not resolve a Redis connection" with an otherwise working redis connection

标签 docker redis docker-compose python-rq

我觉得我正在做的事情与此相关的所有其他问题都有一个公认的答案建议。但我无法使用 rq 获取 Flask 应用程序尽管使用裸 Redis 实例成功连接到 Redis,但仍然成功连接到 Redis。

在我的 web 服务的应用代码中:

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 实例无法使用它。如果我为 Queue 初始化一个单独的 Redis 实例(或者完全保留计数器内容),则没有区别。

我使用 docker stack deploydocker-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:

当我的 redis 实例告诉我其他情况时,我应该如何解释来自 Queue 的错误,声称无法解析 Redis 连接?

最佳答案

如果我想当然地认为 official documentation应遵循,创建队列对象的正确语法是:

my_queue = Queue(connection=my_redis_connection_object)

所以改变你的路线

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

至以下内容

q = Queue(connection=redis)

--

补充说明:与您的问题无关,但您的文件顶部有 Queue 的重复导入。

关于docker - Docker 中的 rq : "Could not resolve a Redis connection" with an otherwise working redis connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58043959/

相关文章:

docker - 创建新计算实例但服务帐户确实具有权限时 GCP 中出现权限错误

docker - 装入的LVM卷未传递到容器

ubuntu - Docker exec 用户进程中的 Golang 应用导致 "no such file or directory"

docker build 使用注册表中以前的构建缓存

docker - Filebeat 无法作为 docker 容器启动

database - Redis:我可以为不同的键保存超过 1 个值吗?

mysql - Redis作为MySQL引擎?

php - 如何使用 'subscribe' 通过 predis 接收更多消息?

linux - 在 Docker 中的卷之间移动文件很慢

docker - 我可以将 Docker Compose 与使用构建器模式的图像一起使用吗?