首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Djcelery强制使用‘数据库’后端,如何正确绕过它?

Djcelery强制使用‘数据库’后端,如何正确绕过它?
EN

Stack Overflow用户
提问于 2013-07-17 08:19:40
回答 1查看 1.2K关注 0票数 1

在我的Django项目中,我根本不使用SQL数据库,我的主要数据存储是MongoDB,通过蒙古发动机

我想设置芹菜作为经纪人和后端与Redis一起工作。我安装了姜戈-芹菜-红葡萄酒,安装了Redis (本地和生产),并尝试在我的settings.py中使用以下内容:

代码语言:javascript
复制
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重写的方法,而我找到的唯一方法就是复制芹菜/装载机并修改该行:

代码语言:javascript
复制
override_backends = {
    'database': 'celery.backends.redis.RedisBackend',
}

然后,在我的settings.py中,我会:

代码语言:javascript
复制
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()了。

这显然是个丑陋的黑客,有什么更优雅的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-17 13:07:39

你就不能把redis设为CELERY_RESULT_BACKEND吗?参考见医生们

django-celery重写默认的celery.backends.database有一个很好的理由:您不能在Django ORM中使用SQLAlchemy。我认为将database后端路由到redis没有意义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17694648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档