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

Heroku部署Flask集成Celery+Redis报Connection refused错误如何解决?

解决方案

你遇到的报错核心原因是Celery启动时没有正确加载到你配置的Redis broker地址,仍在使用默认的RabbitMQ(amqp)地址尝试连接,按以下步骤修改即可:

1. 修正配置项与配置加载逻辑

1.1 修正config.py中的配置键

Celery中结果后端的配置键为result_backend,对应带CELERY_前缀的配置为CELERY_RESULT_BACKEND,修改你的config.py:

class Config(object):
    ...
    CELERY_BROKER_URL = os.environ.get('REDIS_URL') or 'redis://localhost:6379/0'
    # 把CELERY_BACKEND_URL改成CELERY_RESULT_BACKEND
    CELERY_RESULT_BACKEND = os.environ.get('REDIS_URL') or 'redis://localhost:6379/0'
    ...

1.2 修正extensions.py中的配置加载参数

Celery读取带统一前缀的配置时需要指定namespace参数,修改extensions.py中的init_app方法:

def init_app(self, app):
    self.app = app
    # 增加namespace='CELERY'参数,自动匹配所有CELERY_开头的配置
    self.config_from_object(app.config, namespace='CELERY')

2. 调整Celery启动入口

你当前的启动命令直接导入celery实例时,还未执行Flask应用初始化,配置没有被加载到Celery中,做以下修改:

  1. 在项目根目录新建celery_app.py文件,内容如下:
from app import create_app
from extensions import celery

# 初始化Flask应用并加载配置到Celery
app = create_app()
celery.init_app(app)
  1. 修改Procfile中的启动命令:
worker: celery -A celery_app.celery worker --loglevel=debug

3. 验证配置生效

部署前可在本地验证:

  • 启动本地Redis服务
  • 执行命令celery -A celery_app.celery inspect ping,返回pong即说明连接正常

内容的提问来源于stack exchange,提问作者Dr. Funkenstein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:03