You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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传递底层参数

验证步骤

  1. 保存配置后重启Heroku应用:heroku restart
  2. 访问/login/路径测试,若仍报错,查看错误栈定位是缓存还是队列配置引发的问题,针对性调整

内容的提问来源于stack exchange,提问作者betsy_roth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:40:07