2011-12-08 25 views
11

Estoy tratando de utilizar Django-apio en mi proyectodjango-apio: Ningún resultado backend configura

En settings.py tengo

CELERY_RESULT_BACKEND = "amqp" 

El servidor comenzó bien con

python manage.py celeryd --setting=settings 

Pero si quiero acceder a un resultado de una tarea retrasada, aparece el siguiente error:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\celery\result.py", line 108, in ready 
    return self.status in self.backend.READY_STATES 
    File "C:\Python27\lib\site-packages\celery\result.py", line 196, in status 
    return self.state 
    File "C:\Python27\lib\site-packages\celery\result.py", line 191, in state 
    return self.backend.get_status(self.task_id) 
    File "C:\Python27\lib\site-packages\celery\backends\base.py", line 404, in _is 
_disabled 
    raise NotImplementedError("No result backend configured. " 
NotImplementedError: No result backend configured. Please see the documentation 
for more information. 

Es muy extraño porque cuando corro apical (con la misma configuración de apio), funciona muy bien. ¿Alguien ha encontrado este problema antes?

¡Gracias de antemano!

Respuesta

0

De alguna manera la consola tiene que tener el entorno django configurado para poder recuperar la configuración. Por ejemplo, en PyCharm puede ejecutar la consola django, en la que todo funciona como se espera.

4

que tenía el mismo problema al obtener el resultado de nuevo de la tarea de apio, aunque la tarea de apio se ejecutó (registros de la consola). Lo que encontré fue, que tenía la misma configuración de CELERY_RESULT_BACKEND = "redis" en settings.py Django, pero también tuve una instancia de apio en el tasks.py

celery = Celery('tasks', broker='redis://localhost') - lo que supongo que reemplaza la propiedad settings.py y por lo tanto no estaba configurando el backend servidor para mi instancia de apio que se utiliza para almacenar los resultados.

eliminé esto y dejé que django obtuviera las propiedades de obtención de apio de settings.py y el código de muestra funcionó para mí.

1

Para aquellos que están en una búsqueda desesperada de una solución como yo.

Deja esta línea al final de la secuencia de comandos settings.py:

djcelery.setup_loader() 

Parece que django-apio no va a tener en cuenta es la configuración propia y sin un orden estricto.

0

Ver AMQP BACKEND SETTINGS para una mejor comprensión

Note The AMQP backend requires RabbitMQ 1.1.0 or higher to automatically expire results. If you are running an older version of RabbitMQ you should disable result expiration like this: CELERY_TASK_RESULT_EXPIRES = None

Trate de añadir la siguiente línea a su settings.py:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

0

En mi caso, el problema fue que yo estaba pasando el argumento CELERY_RESULT_BACKEND para el constructor de apio:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     CELERY_RESULT_BACKEND='amqp://', 
     include=['proj.tasks']) 

La solución fue utilizar el argumento de backend en su lugar:

Celery('proj', 
     broker = 'amqp://guest:[email protected]:5672//', 
     backend='amqp://', 
     include=['proj.tasks']) 
Cuestiones relacionadas