升级Redis至7.0.11遇TypeError:意外参数'ssl_cert_reqs'
解决Heroku Redis 7.0.11 TLS配置引发的
ssl_cert_reqs TypeError问题 问题核心
Heroku强制升级Redis到7.0.11后要求启用TLS,按文档设置ssl_cert_reqs=None到Django的CACHES配置中,访问/login/时触发TypeError: __init__() got an unexpected keyword argument 'ssl_cert_reqs',调整多版本依赖无效。
根本原因
ssl_cert_reqs是底层redis-py库的连接参数,不能直接放在Django CACHES的根级配置或普通OPTIONS里;另外django-rq的队列配置和Django缓存配置是独立的,若队列依赖Redis,需单独配置连接参数。
解决方案
1. Django缓存(django-redis)的正确配置
将SSL参数嵌套在CONNECTION_POOL_KWARGS中,而非直接放在OPTIONS下:
# settings.py CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": os.environ.get("REDIS_URL"), "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": { "ssl_cert_reqs": None, "max_connections": 5 } } } }
2. django-rq队列的正确配置
django-rq需要单独在RQ_QUEUES里设置connection_kwargs传递SSL参数:
# settings.py RQ_QUEUES = { "default": { "URL": os.environ.get("REDIS_URL"), "DEFAULT_TIMEOUT": 360, "connection_kwargs": { "ssl_cert_reqs": None } } }
3. 依赖版本兼容性检查
确保以下依赖版本匹配:
redis(redis-py)>= 4.0.0:该版本开始支持ssl_cert_reqs参数django-redis>= 5.0.0:能正确将CONNECTION_POOL_KWARGS传递给redis-py连接池django-rq>= 2.5.0:支持在队列配置中使用connection_kwargs传递底层参数
验证步骤
- 保存配置后重启Heroku应用:
heroku restart - 访问
/login/路径测试,若仍报错,查看错误栈定位是缓存还是队列配置引发的问题,针对性调整
内容的提问来源于stack exchange,提问作者betsy_roth
相关产品推荐
相关产品推荐

