【问题标题】:How to properly configure djcelery results backend to database如何正确配置 djcelery 结果后端到数据库
【发布时间】:2012-05-27 05:30:42
【问题描述】:

我正在尝试设置 djangocelery 以将任务结果存储在数据库中。

我设置:

CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend'

然后我同步并迁移了数据库(没有错误)。

Celery 正在工作并且任务得到处理(我可以得到结果),但管理员显示没有任务。数据库中有两个表celery_taskmetadjcelery_taskmeta。第一个保存结果,第二个显示在管理员中。任何人都知道如何正确配置它?

【问题讨论】:

标签: django celery djcelery


【解决方案1】:

移动配置更新,例如
app.conf.update(CELERY_RESULT_BACKEND='djcelery.backends.database.DatabaseBackend')

到文件 celery.py 的末尾为我做了诀窍。

【讨论】:

    【解决方案2】:

    正确答案的相关问题是here

    你应该实际运行

    python manage.py celery worker -E
    

    python manage.py celerycam
    

    之后任务结果将显示在管理员中(Djcelery › 任务)

    【讨论】:

      【解决方案3】:

      检查the doc,当你使用djcelery时,设置CELERY_RESULT_BACKEND="database"或者甚至不用费心写这行,因为djcelery默认设置它。

      结果存储在celery_taskmeta表中,你应该自己注册djcelery.models.TaskMeta给管理员:

      # in some admin.py, which is contained by an app after `djcelery` in `INSTALLED_APPS`
      # or directly in djcelery/admin.py
      
      from djcelery.models import TaskMeta
      class TaskMetaAdmin(admin.ModelAdmin):
          readonly_fields = ('result',)    
      admin.site.register(TaskMeta, TaskMetaAdmin)
      

      【讨论】:

      • 我将 CELERY_RESULT_BACKEND 更改为 "database" 但 id 仍然不起作用。我在应用程序 djcelery 的管理员中有 TaskState 表,并且在管理员中注册的该应用程序的其他模型正在工作 ---工作人员模型显示连接的工作人员。
      • 另请注意,监控不适用于所有经纪人。只有在此表中支持“扇出”的人才能这样做:kombu.readthedocs.org/en/latest/…
      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2014-12-01
      • 2019-05-31
      • 2016-09-03
      相关资源
      最近更新 更多