Docker 中的 rq:"Could not resolve a Redis connection" 具有正常工作的 Redis 连接
rq in Docker: "Could not resolve a Redis connection" with an otherwise working redis connection
我觉得我正在做关于此问题的所有其他问题都有可接受的答案建议。但是,尽管使用裸 Redis
实例成功连接到 Redis,但我无法使用 rq 获得 Flask 应用程序以成功连接到 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 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:
当我的 redis
实例告诉我其他情况时,我应该如何解释 Queue
声称无法解析 Redis 连接的错误?
如果我理所当然地认为应该遵循 official documentation,那么创建队列对象的正确语法是:
my_queue = Queue(connection=my_redis_connection_object)
所以换行
# /!\ Wrong /!\
q = Queue(redis)
以下
q = Queue(connection=redis)
--
补充说明:与您的问题无关,但您的文件顶部有 Queue
的重复导入。
我觉得我正在做关于此问题的所有其他问题都有可接受的答案建议。但是,尽管使用裸 Redis
实例成功连接到 Redis,但我无法使用 rq 获得 Flask 应用程序以成功连接到 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 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:
当我的 redis
实例告诉我其他情况时,我应该如何解释 Queue
声称无法解析 Redis 连接的错误?
如果我理所当然地认为应该遵循 official documentation,那么创建队列对象的正确语法是:
my_queue = Queue(connection=my_redis_connection_object)
所以换行
# /!\ Wrong /!\
q = Queue(redis)
以下
q = Queue(connection=redis)
--
补充说明:与您的问题无关,但您的文件顶部有 Queue
的重复导入。