在我的Django项目中,我根本不使用SQL数据库,我的主要数据存储是MongoDB,通过蒙古发动机。
我想设置芹菜作为经纪人和后端与Redis一起工作。我安装了姜戈-芹菜-红葡萄酒,安装了Redis (本地和生产),并尝试在我的settings.py中使用以下内容:
BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = BROKER_URL
import djcelery
djcelery.setup_loader()但是当我运行芹菜过程时,它收到了一个要处理的任务,当返回结果时,它抱怨settings.DATABASES配置不当。既然我把CELERY_RESULT_BACKEND设为Redis,那就没什么意义了。
我发现djcelery覆盖了djcelery.setup_loader()上的后端到database:参见源代码中的DjangoLoader。
我很难找到绕过DjangoLoader重写的方法,而我找到的唯一方法就是复制芹菜/装载机并修改该行:
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()了。
这显然是个丑陋的黑客,有什么更优雅的方法吗?
发布于 2013-07-17 13:07:39
你就不能把redis设为CELERY_RESULT_BACKEND吗?参考见医生们。
django-celery重写默认的celery.backends.database有一个很好的理由:您不能在Django ORM中使用SQLAlchemy。我认为将database后端路由到redis没有意义。
https://stackoverflow.com/questions/17694648
复制相似问题