Celery Beat无法与django-money更新汇率:配置问题求助
解决django-money定时更新汇率的配置错误
问题原因
你遇到的ImproperlyConfigured错误,核心是Celery任务运行时,django-money的OpenExchangeRatesBackend无法读取到Django全局配置里的OPEN_EXCHANGE_RATES_APP_ID,大概率是任务未正确初始化Django环境,或是settings导入逻辑有问题。
解决方案
1. 确保Celery任务初始化Django环境
在core/tasks.py最顶部添加Django初始化代码,保证任务运行时能加载全局配置:
import django django.setup() from celery import shared_task from djmoney import settings as djmoney_settings from django.utils.module_loading import import_string
2. 修正settings导入逻辑
显式区分Django全局配置和django-money的配置,修改后的任务函数如下:
@shared_task def update_rates(backend=djmoney_settings.EXCHANGE_BACKEND, **kwargs): backend = import_string(backend)() backend.update_rates(**kwargs) print("Successfully updated")
3. 检查Celery服务启动命令
启动Celery Beat和Worker时,必须指定正确的Django应用模块:
- 启动Worker:
celery -A core worker -l info
- 启动Beat:
celery -A core beat -l info
如果使用django-celery-beat,先执行数据库迁移:
python manage.py migrate django_celery_beat
4. 验证配置项正确性
确认settings.py中配置了正确的汇率后端和有效密钥:
# core/settings.py EXCHANGE_BACKEND = 'djmoney.contrib.exchange.backends.OpenExchangeRatesBackend' OPEN_EXCHANGE_RATES_APP_ID = '5507ba2d9b8f4c46adca3169aef9c281'
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

