gpt4 book ai didi

django - Djcelery 强制使用 'database' 后端,如何正确绕过它?

转载 作者:IT王子 更新时间:2023-10-29 06:12:03 25 4
gpt4 key购买 nike

在我的 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,是否有更优雅的方式来做到这一点?

最佳答案

你不能把 redis 设置成 CELERY_RESULT_BACKEND 吗?参见 the docs供引用。

django-celery 覆盖默认的 celery.backends.database 有一个很好的理由:你不能将 SQLAlchemy 一起使用Django ORM。我认为将 database 后端路由到 redis 毫无意义。

关于django - Djcelery 强制使用 'database' 后端,如何正确绕过它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com