2

1)我正在尝试使用 Celery(以 RabbitMQ 作为代理)和 Django 构建应用程序 - 使用 MongoDB(mongoengine)作为模型的数据库。因此,Web 服务器接收到的请求将转换为任务,并在 Celery 的帮助下排队等待工作人员执行。

我遵循了以下教程:

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html#configuring-your-django-project-to-use-celery

https://mongoengine-odm.readthedocs.org/en/latest/django.html

但我仍然收到以下错误:

配置不当:settings.DATABASES 配置不正确。请提供 ENGINE 值。

正如两个教程中提到的,settings.DATABASES 应该被注释,而不是它应该只有

mongoengine.connect('myDB')

然而错误正是关于没有配置数据库。

(除此之外,我还没有为 Celery 配置任何结果后端。)

任何人都可以帮助我就我必须设置的内容和位置提供建议吗?

2)另一个问题是:在只涉及 Celery 的项目中,总是有一个 Celery 实例。但是在关于使用 Django 和 Celery 构建 Web 应用程序的教程中,我没有看到任何提及这一点。我必须显式实例化 Celery 还是默认情况下在其他地方完成?

4

2 回答 2

1

1)如果有人对答案感兴趣,我终于设法让它工作,但我不确定我是否正确理解发生了什么。

所以显然问题是我没有为 Celery 设置结果后端。将以下行放入 settings.py 后,我就摆脱了错误:

CELERY_RESULT_BACKEND = "amqp"

2)我的项目(我正在使用 djcelery)在没有我明确实例化 Celery 的情况下工作。我假设这是由框架在后面的某个地方完成的。

于 2013-01-16T10:21:30.990 回答
1

发生的情况是 Celery 尝试使用 Django 的默认数据库(在 中定义的settings.DATABASES那个)作为 Celery Result 数据库,但是要使用 mongoengine 作为您的主要 Django 数据库,您必须绕过 settings.DATABASES

所以只要确保你正确地定义了这两者BROKER_URLCELERY_RESULT_BACKEND这样 Celery 就不会尝试查询 settings.DATABASES。我想您希望它们相同,但您可以选择将它们分开。

BROKER_URL = "amqp://guest:guest@localhost:5672//"
CELERY_RESULT_BACKEND = "amqp"

对于其他后端,请参阅


您问题的第 2 部分。

你有CELERY_ALWAYS_EAGER = Truesettings.py?这就是通常情况下不需要单独启动 Celery 进程的方式。但不要在生产中使用它。看到这个问题

于 2013-07-16T19:35:39.373 回答