【发布时间】:2013-07-17 08:19:40
【问题描述】:
在我的 Django 项目中,我根本没有使用 SQL 数据库,我的主要数据存储是 MongoDB,通过mongoengine。
我想设置 Celery 以使用 Redis 作为代理和后端。我安装了django-celery-with-redis,安装了 Redis(本地和生产环境),并尝试在我的 settings.py 中使用以下内容:
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = BROKER_URL
import djcelery
djcelery.setup_loader()
但是当我运行 celery 进程并收到要处理的任务时,返回结果时,它抱怨 settings.DATABASES 配置不正确。这没有多大意义,因为我将 CELERY_RESULT_BACKEND 设置为 Redis。
我发现 djcelery 将 djcelery.setup_loader() 上的后端覆盖为 database:请参阅 source code 中的 DjangoLoader。
我努力寻找绕过 DjangoLoader 覆盖的方法,我找到的唯一方法是复制 djcelery/loaders.py 并修改该行:
override_backends = {
'database': 'celery.backends.redis.RedisBackend',
}
然后在我的 settings.py 我做:
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = BROKER_URL
os.environ.setdefault('CELERY_LOADER',
'myproject.utils.ugly_djcelery_hack.DjangoLoader')
注意没有djcelery.setup_loader() 了。
这显然是一个丑陋的 hack,有没有更优雅的方法?
【问题讨论】:
标签: django redis celery djcelery