2012-05-20 63 views
10

我試圖設置djangocelery將任務結果存儲在數據庫中。如何正確配置djcelery結果後端數據庫

我設置:

CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend' 

然後我同步和遷移的數據庫(沒有錯誤)。

芹菜工作和任務得到處理(我可以得到結果),但管理員顯示沒有任務。在數據庫中有兩個表celery_taskmetadjcelery_taskmeta。第一個是持有結果,第二個是在管理員中顯示。任何人都瞭解如何正確配置它?

+0

[Monitoring Celery,what should I use?](http://stackoverflow.com/questions/5809408/monitoring-celery-what-should-i-use) –

回答

18

檢查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) 
+1

我將'CELERY_RESULT_BACKEND'改爲'「數據庫「,但仍然無法正常工作。我在應用程序djcelery中的管理員中有TaskState表,並且在管理員中註冊的該應用程序中的其他模型正在工作---工作人員模型顯示已連接的工作人員。 –

+1

TaskState用於監控:http://docs.celeryproject.org/en/latest/userguide/monitoring.html#django-admin-monitor – asksol

+1

另請注意,監控不適用於所有經紀商。只有那些在該表中支持「扇出」的人才會這樣做:http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison – asksol

10

與正確答案相關的問題是here

你應該實際運行

python manage.py celery worker -E 

python manage.py celerycam 

之後任務的結果將顯示在管理員(Djcelery>任務)

0

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

到文件celery.py結束奏效了我。