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

升级Heroku Redis至7.0.11后Celery出现SSL相关报错

问题分析

升级Heroku Redis至7.0.11后,Celery启动触发TypeError: 'str' object does not support item assignment,报错指向kombu/utils/url.py中尝试对字符串类型的query['ssl']执行字典赋值操作。

核心原因是Heroku Redis 7.x默认提供的URL为rediss://开头(已启用SSL),且URL中可能包含ssl=true这类字符串形式的SSL参数,而你手动配置的broker_use_ssl和redis_backend_use_ssl是字典格式,两者冲突导致kombu解析URL时类型不匹配。

解决方案

方案1:移除手动SSL配置(推荐)

Heroku Redis 7.x的rediss://协议已自动启用SSL,无需额外配置字典格式的SSL参数。修改celery.py如下:

from celery import Celery

app = Celery('endpoints')

# namespace='CELERY' means all celery-related configuration keys should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# 移除以下两行手动SSL配置
# app.conf.redis_backend_use_ssl = {'ssl_cert_reqs': 'CERT_NONE'}
# app.conf.broker_use_ssl = {'ssl_cert_reqs': 'CERT_NONE'}

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

方案2:保留自定义SSL验证配置

如果需要指定ssl_cert_reqs=CERT_NONE,直接在Redis URL后追加参数,避免字典与字符串参数冲突:

from celery import Celery
import os

app = Celery('endpoints')

app.config_from_object('django.conf:settings', namespace='CELERY')

# 获取Heroku Redis URL并追加SSL参数
redis_url = os.environ.get('REDIS_URL')
if redis_url:
    # 追加ssl_cert_reqs参数
    if '?' in redis_url:
        redis_url += '&ssl_cert_reqs=CERT_NONE'
    else:
        redis_url += '?ssl_cert_reqs=CERT_NONE'
    app.conf.broker_url = redis_url
    app.conf.result_backend = redis_url

app.autodiscover_tasks()

方案3:通过Django Settings统一配置

在Django的settings.py中配置Celery参数,避免在celery.py中重复设置:

import os

CELERY_BROKER_URL = os.environ.get('REDIS_URL')
CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL')
# 仅当URL未自动处理SSL时使用,若URL为rediss://开头可注释
CELERY_BROKER_USE_SSL = {'ssl_cert_reqs': 'CERT_NONE'}
CELERY_REDIS_BACKEND_USE_SSL = {'ssl_cert_reqs': 'CERT_NONE'}

celery.py保持原有结构即可,无需手动添加SSL配置。

验证步骤
  1. 重新部署应用至Heroku
  2. 启动Celery worker,检查是否仍有报错
  3. 若问题依旧,确认REDIS_URL环境变量为rediss://开头,而非redis://

内容的提问来源于stack exchange,提问作者tl-jamie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:45:07