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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:55:21