2011-12-08 12 views
11

Sto cercando di usare django-sedano nel mio progettodjango-sedano: Nessun risultato backend configurato

In settings.py ho

CELERY_RESULT_BACKEND = "amqp" 

Il server ha iniziato bene con

python manage.py celeryd --setting=settings 

Ma se voglio accedere a un risultato da un'attività ritardata, ottengo il seguente errore:

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. 

E 'molto strano perché quando ho appena eseguito celeryd (con le stesse impostazioni di sedano), funziona bene. Qualcuno ha già incontrato prima questo problema?

Grazie in anticipo!

risposta

0

Alcuni come la console deve avere l'ambiente django impostato per raccogliere le impostazioni. Ad esempio, in PyCharm è possibile eseguire la console django, in cui tutto funziona come previsto.

4

Ho avuto lo stesso problema mentre ottenere il risultato di nuovo dall'attività di celery sebbene sia stato eseguito il task di sedano (log della console). Quello che ho trovato è stato, ho avuto la stessa impostazione CELERY_RESULT_BACKEND = "redis" in Django settings.py ma ho avuto anche un'istanza sedano in tasks.py

celery = Celery('tasks', broker='redis://localhost') - che suppongo override la proprietà settings.py e, quindi, non era la configurazione del backend server per la mia istanza di celery che viene utilizzata per archiviare i risultati.

ho rimosso questo e lasciato django ottenere sedici proprietà get da settings.py e il codice di esempio ha funzionato per me.

1

Per coloro che sono alla disperata ricerca di una soluzione come lo ero io.

mettere questa riga alla fine dello script settings.py:

djcelery.setup_loader() 

Sembra django-sedano non ha intenzione di prendere in considerazione è di possedere impostazioni senza un ordine rigoroso.

0

Vedi AMQP BACKEND SETTINGS per una migliore comprensione

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

Provate ad aggiungere la riga sotto al settings.py:

CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours

0

Nel mio caso, il problema era che mi stava passando l'argomento CELERY_RESULT_BACKEND al costruttore di sedani:

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

La soluzione era quella di utilizzare l'argomento backend invece:

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