2012-05-18 13 views
6

I SET CELERY_RESULT_BACKEND = "AMQP" in celeryconfig.py ma ottengo:Come impostare un backend per il django-sedano. Ho impostato CELERY_RESULT_BACKEND, ma non è riconosciuto

>>> from tasks import add 
>>> result = add.delay(3,5) 
>>> result.ready() 

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 105, in ready 
    return self.state in self.backend.READY_STATES 
    File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/result.py", line 184, in state 
    return self.backend.get_status(self.task_id) 
    File "/djangoprojects/venv/local/lib/python2.7/site-packages/celery/backends/base.py", line 414, in _is_disabled 
    raise NotImplementedError("No result backend configured. " 
NotImplementedError: No result backend configured. Please see the documentation for more information. 
+0

Sei in esecuzione python shell dalla stessa directory di celeryconfig.py? – mher

risposta

12

Ho appena passato attraverso questo modo che io possa far luce su questo. Si potrebbe pensare a tutta la grande documentazione affermando che alcuni di questi sarebbero stati un po 'più ovvi.

Suppongo che tu abbia sia RabbitMQ attivo e funzionante (deve essere in esecuzione), e che hai installato dj-celery.

Una volta che hai tutto ciò che devi fare è includere questa singola riga nel tuo file setting.py.

BROKER_URL = "amqp://guest:[email protected]:5672//" 

allora avete bisogno di eseguire syncdb e iniziare questa cosa usando:

python manage.py celeryd -E -B --loglevel=info 

Le -E stati che si desidera eventi catturati e la -B afferma che si desidera celerybeats esecuzione. Il primo consente di vedere effettivamente qualcosa nella finestra di amministrazione e in seguito consente di pianificare. Infine, devi assicurarti di catturare effettivamente gli eventi e lo stato. Quindi, in un altro terminale eseguire questo:

./manage.py celerycam 

E poi finalmente il vostro grado di vedere l'esempio di lavoro previsto nei documenti .. - Ancora una volta supponendo che si è creato il tasks.py che dice.

>>> result = add.delay(4, 4) 
>>> result.ready() # returns True if the task has finished processing. 
False 
>>> result.result # task is not ready, so no return value yet. 
None 
>>> result.get() # Waits until the task is done and returns the retval. 
8 
>>> result.result # direct access to result, doesn't re-raise errors. 
8 
>>> result.successful() # returns True if the task didn't end in failure. 
True 

Inoltre, è possibile visualizzare il proprio stato nel pannello di amministrazione.

Django Task Manager

Spero che questo aiuta !! Vorrei aggiungere ancora una cosa che mi ha aiutato. Guardare il file Log RabbitMQ è stato fondamentale in quanto mi ha aiutato a capire che il django-sedano stava effettivamente parlando con RabbitMQ.

+0

Avevo rabbitmq in esecuzione e django-sedano installato, ma non avevo in esecuzione django-sedano. – johnlockwood

1

si sono in esecuzione Django sedano?

Se è così, è necessario avviare una shell python nel contesto di Django (o qualunque sia il termine tecnico).

Tipo:

python manage.py shell 

e cercare i comandi da quel guscio

Problemi correlati