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

如何将Django外部settings.py中的broker_url传递给Celery服务

问题根源

你的Celery实例运行时加载的Django配置是项目根目录下的默认mydjangoproject.settings,没有加载/etc/opt/mydjangoproject/路径下的自定义配置文件,所以上下文中不存在RABBITMQ_BROKER变量。Django能正常读取是因为你启动Django服务时已经指定了自定义配置路径、且将/etc/opt加入了Python模块搜索路径,Celery侧没有做对应的配置。

另外注意你给出的/etc/opt/mydjangoproject/settings.py里存在拼写错误:from mydangoproject.settings import * 中项目名少了字符j,应为mydjangoproject,先修正这个笔误。

修复步骤

1. 避免配置命名冲突

将/etc/opt/mydjangoproject/settings.py重命名为/etc/opt/mydjangoproject/prod_settings.py,防止和项目根目录下的同名配置文件加载冲突。

2. 调整Celery启动的环境变量

命令行临时启动场景

执行Celery启动命令前,先设置两个环境变量:

# 把自定义配置路径加入Python搜索路径
export PYTHONPATH="${PYTHONPATH}:/etc/opt"
# 指定Django加载自定义配置
export DJANGO_SETTINGS_MODULE="mydjangoproject.prod_settings"

再执行原有Celery启动命令即可正常读取变量。

systemd服务启动场景

编辑/etc/conf.d/celery文件,在末尾追加两行配置:

PYTHONPATH=/etc/opt:/opt/mydjangoproject
DJANGO_SETTINGS_MODULE=mydjangoproject.prod_settings

保存后执行以下命令重载配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart celery

可选:硬编码配置路径(不推荐但更简单)

如果不想用环境变量配置,可以直接修改项目根目录下的celery.py,手动添加搜索路径并指定配置模块:

import os
import sys
from celery import Celery

# 加自定义配置路径到Python搜索路径
sys.path.append('/etc/opt')
# 指定加载自定义生产配置
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjangoproject.prod_settings')

app = Celery('mydjangoproject')
default_config = 'mydjangoproject.celery_config'
app.config_from_object(default_config)
app.autodiscover_tasks()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:04