启动rq-worker时遇Error 111连接localhost:6379拒绝的问题怎么解决?
解决RQ Worker无法连接本地Redis的问题
从你提供的信息来看,Redis确实在127.0.0.1:6379正常运行,redis-cli ping返回PONG也验证了这一点,那问题大概率出在RQ Worker的配置或运行环境上,咱们逐个排查:
1. 检查RQ的Redis连接配置
RQ默认会连接localhost:6379,但有时候Flask应用的RQ初始化代码、配置文件或环境变量可能会覆盖默认参数:
- 先确认你Flask应用里初始化RQ的代码是否正确指向了本地Redis:
from rq import Queue from redis import Redis # 确保这里的host和port参数是127.0.0.1和6379 redis_conn = Redis(host='127.0.0.1', port=6379) q = Queue(connection=redis_conn) - 如果用了
REDIS_URL环境变量配置,先打印看看是否正确:
如果输出不是echo $REDIS_URLredis://127.0.0.1:6379,启动rq worker时可以直接指定正确的连接地址:rq worker --url redis://127.0.0.1:6379
2. 检查运行用户的权限限制
从ps aux输出看,Redis是以redis用户运行的,而你启动rq worker用的是sib用户。虽然本地连接理论上不受限,但SELinux/AppArmor这类安全模块可能会限制用户访问:
- 可以临时用
redis用户启动worker测试:
如果能正常连接,说明sudo -u redis rq workersib用户有访问限制,需要调整安全模块规则或权限。
3. 确认Redis的监听模式
有些Redis配置会同时开启Unix Socket,而RQ可能默认尝试连接Socket而非TCP端口:
- 查看
redis.conf里的unixsocket配置项,确认Socket路径后,尝试用Socket启动worker:
(替换成你实际的Socket路径)rq worker --url unix:///var/run/redis/redis.sock
4. 验证端口监听状态
虽然redis-cli能连接,但还是可以再确认Redis是否真的在监听6379端口:
netstat -tulpn | grep 6379
正常输出应该包含127.0.0.1:6379和redis-server进程。
5. 检查RQ与Redis-Py的版本兼容性
版本不兼容也可能导致连接异常,先查看当前安装的版本:
pip show rq redis
如果版本较旧,建议升级到稳定版:
pip install --upgrade rq redis
我之前遇到过类似问题,就是环境变量里的REDIS_URL被其他服务改成了远程地址,导致RQ Worker一直连错地方,指定--url参数就解决了。你可以先从检查RQ配置和环境变量入手,应该能快速定位问题。
内容的提问来源于stack exchange,提问作者Iraida Mercedes Barreto Díaz
相关产品推荐
相关产品推荐

