DJCelery 不在 Django SQLite 数据库中存储任务结果
DJCelery not storing task results in Django SQLite DB
DJCelery
没有将任务结果存储在我的 Django
SQLite
数据库中。
我有一个现有的 Django 项目,我已经开始在其上设置带有 RabbitMQ 的 Celery。我启动了我的 RabbitMQ 服务器。我可以 运行 Celery python manage.py celeryd --verbosity=2 --loglevel=DEBUG
和 Celerybeat python manage.py celerybeat --verbosity=2 --loglevel=DEBUG
。一切都开始时没有错误,我的周期性示例任务也 运行s 没有错误。
我是用pip install django-celery
安装的。我安装的应用程序中有 djcelery 和 运行 python manage.py migrate djcelery
。我在 settings.py 文件的末尾添加了 CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
。
当我运行python manage.py celeryd --verbosity=2 --loglevel=DEBUG
时,启动文字显示:
...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
...
结果部分为空表明配置不正确,但我不知道怎么办。我尝试在我的 celery.py 文件中使用 app.conf.update 来设置 CELERY_RESULT_BACKEND 但得到了相同的结果。我遗漏了 CELERY_RESULT_BACKEND,但默认情况下没有结果。我也尝试使用 'database'
而不是 'djcelery.backends.database:DatabaseBackend'
但这表明它试图使用 sqlalchemy
而不是 djcelery
.
当我 运行 python manage.py runserver
时,我可以看到 DJCELERY
部分包含表格 Crontabs
、Intervals
、Periodic tasks
、Tasks
,以及 Workers
。但是我的任务没有任何数据。
谁能指出错误或遗漏的地方?谢谢你的时间。
celery docs 提到了几种不同的语法,不确定您尝试的是否有效。尝试以下操作:
# use a connection string
CELERY_RESULT_BACKEND = 'db+sqlite:///foo.db'
更新:
如您的评论所述,the docs also mention 也可以使用 Django ORM/Cache 作为结果后端。为此,您必须将您尝试的设置传递到您的芹菜应用程序配置中:
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
或者,文档也解释了
If you have connected Celery to your Django settings then you can add
this directly into your settings module (without the app.conf.update
part)
这是对同一页面中详述的 Celery 应用程序配置的参考。这基本上意味着如果你在一个模块中配置你的芹菜应用程序,和你添加Django设置模块作为芹菜的配置源,然后设置CELERY_RESULT_BACKEND
在您的 Django 设置模块中,就像您所做的那样,也将起作用。
文件: proj/proj/celery.py
# important to pass the Django settings to your celery app
app = Celery('proj')
app.config_from_object('django.conf:settings')
文件: proj/proj/settings.py
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
tutuDajuju 指引了我正确的方向 - 还有更多内容,所以我会全部写下来。我放弃使用 djcelery
,转而使用 sqlalchemy
,在 Django
.
之外使用单独的后端数据库
在我的venv
里面我运行pip install sqlalchemy
。然后我将 CELERY_RESULT_BACKEND = 'db+sqlite:///celery_results.sqlite3'
放入 settings.py
。这将 Celery
连接到新的 SQLite
数据库以供 state/results.
使用
运行 celery -A <projectapp>.celery:app worker
然后在启动信息中显示数据库:
...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: sqlite:///celery_results.sqlite3
- *** --- * --- .> concurrency: 1 (prefork)
...
起初我很担心,因为数据库文件没有在我的 Django 项目目录中创建。这是因为我还没有 运行 任务。一旦我 运行 我的第一个任务,数据库和 table 就被正确创建了。
我已通过 运行 脚本验证任务结果存储在数据库中:
from sqlalchemy import create_engine
engine = create_engine("sqlite:///celery_results.sqlite3")
connection = engine.connect()
result = connection.execute("select * from celery_taskmeta")
for row in result:
print(row)
connection.close()
我通过以下方式找到了 table 个名字:
print(engine.table_name())
希望这对某人有所帮助。
DJCelery
没有将任务结果存储在我的 Django
SQLite
数据库中。
我有一个现有的 Django 项目,我已经开始在其上设置带有 RabbitMQ 的 Celery。我启动了我的 RabbitMQ 服务器。我可以 运行 Celery python manage.py celeryd --verbosity=2 --loglevel=DEBUG
和 Celerybeat python manage.py celerybeat --verbosity=2 --loglevel=DEBUG
。一切都开始时没有错误,我的周期性示例任务也 运行s 没有错误。
我是用pip install django-celery
安装的。我安装的应用程序中有 djcelery 和 运行 python manage.py migrate djcelery
。我在 settings.py 文件的末尾添加了 CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
。
当我运行python manage.py celeryd --verbosity=2 --loglevel=DEBUG
时,启动文字显示:
...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results:
- *** --- * --- .> concurrency: 1 (prefork)
...
结果部分为空表明配置不正确,但我不知道怎么办。我尝试在我的 celery.py 文件中使用 app.conf.update 来设置 CELERY_RESULT_BACKEND 但得到了相同的结果。我遗漏了 CELERY_RESULT_BACKEND,但默认情况下没有结果。我也尝试使用 'database'
而不是 'djcelery.backends.database:DatabaseBackend'
但这表明它试图使用 sqlalchemy
而不是 djcelery
.
当我 运行 python manage.py runserver
时,我可以看到 DJCELERY
部分包含表格 Crontabs
、Intervals
、Periodic tasks
、Tasks
,以及 Workers
。但是我的任务没有任何数据。
谁能指出错误或遗漏的地方?谢谢你的时间。
celery docs 提到了几种不同的语法,不确定您尝试的是否有效。尝试以下操作:
# use a connection string
CELERY_RESULT_BACKEND = 'db+sqlite:///foo.db'
更新:
如您的评论所述,the docs also mention 也可以使用 Django ORM/Cache 作为结果后端。为此,您必须将您尝试的设置传递到您的芹菜应用程序配置中:
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
或者,文档也解释了
If you have connected Celery to your Django settings then you can add this directly into your settings module (without the app.conf.update part)
这是对同一页面中详述的 Celery 应用程序配置的参考。这基本上意味着如果你在一个模块中配置你的芹菜应用程序,和你添加Django设置模块作为芹菜的配置源,然后设置CELERY_RESULT_BACKEND
在您的 Django 设置模块中,就像您所做的那样,也将起作用。
文件: proj/proj/celery.py
# important to pass the Django settings to your celery app
app = Celery('proj')
app.config_from_object('django.conf:settings')
文件: proj/proj/settings.py
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
tutuDajuju 指引了我正确的方向 - 还有更多内容,所以我会全部写下来。我放弃使用 djcelery
,转而使用 sqlalchemy
,在 Django
.
在我的venv
里面我运行pip install sqlalchemy
。然后我将 CELERY_RESULT_BACKEND = 'db+sqlite:///celery_results.sqlite3'
放入 settings.py
。这将 Celery
连接到新的 SQLite
数据库以供 state/results.
运行 celery -A <projectapp>.celery:app worker
然后在启动信息中显示数据库:
...
- ** ---------- .> transport: amqp://guest:**@localhost:5672//
- ** ---------- .> results: sqlite:///celery_results.sqlite3
- *** --- * --- .> concurrency: 1 (prefork)
...
起初我很担心,因为数据库文件没有在我的 Django 项目目录中创建。这是因为我还没有 运行 任务。一旦我 运行 我的第一个任务,数据库和 table 就被正确创建了。
我已通过 运行 脚本验证任务结果存储在数据库中:
from sqlalchemy import create_engine
engine = create_engine("sqlite:///celery_results.sqlite3")
connection = engine.connect()
result = connection.execute("select * from celery_taskmeta")
for row in result:
print(row)
connection.close()
我通过以下方式找到了 table 个名字:
print(engine.table_name())
希望这对某人有所帮助。