2012-05-20 18 views
10

Estoy intentando configurar djangocelery para almacenar los resultados de las tareas en el databse.Cómo configurar correctamente los resultados de djcelery backend en la base de datos

I SET:

CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend' 

entonces sincronizan y emigraron la db (sin errores).

El apio funciona y las tareas se procesan (puedo obtener los resultados), pero el administrador muestra que no hay tareas. En la base de datos hay dos tablas celery_taskmeta y djcelery_taskmeta. El primero contiene los resultados y el segundo se muestra en admin. ¿Alguien tiene una idea de cómo configurarlo correctamente?

+0

posible duplicado de [Monitoring Celery, ¿qué debo usar?] (Http://stackoverflow.com/questions/5809408/monitoring-celery-what-should-i-use) –

Respuesta

18

Compruebe the doc, cuando utiliza djcelery, establezca CELERY_RESULT_BACKEND="database" o no se moleste en escribir esta línea porque djcelery lo establece de forma predeterminada.

El resultado se almacena en celery_taskmeta mesa, debe registrarse djcelery.models.TaskMeta a admin en solitario:

# 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

He cambiado 'CELERY_RESULT_BACKEND' a' " base de datos "' pero aún no funciona id. Tengo la tabla TaskState en admin en la aplicación djcelery, y otros modelos de la aplicación registrada en el administrador están trabajando --- el modelo de trabajador muestra los trabajadores conectados. –

+1

TaskState es para la supervisión: http://docs.celeryproject.org/en/latest/userguide/monitoring.html#django-admin-monitor – asksol

+1

También tenga en cuenta que la supervisión no funciona para todos los intermediarios. Solo aquellos que tienen soporte 'fanout' en esta tabla lo hacen: http://kombu.readthedocs.org/en/latest/introduction.html#transport-comparison – asksol

10

pregunta relacionada con la respuesta correcta es here.

En realidad debería funcionar

python manage.py celery worker -E 

y

python manage.py celerycam 

Después de que las tareas de los resultados se mostrarán en admin (Djcelery> Tareas)

0

Mover la actualización de configuración, por ejemplo,
app.conf.update (CELERY_RESULT_BACKEND = 'djcelery.backends.database.DatabaseBackend')

hasta el final del archivo celery.py hizo el truco para mí.

Cuestiones relacionadas