2013-03-01 13 views
7

Ho creato un'applicazione django-sedano come nel tutorial:Django Sedano applicazione - No module named errore sedano

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html

Tutto funziona bene quando l'eseguo senza parametri applicazione come in:

$ python manage.py celery worker -l info 

ma non posso iniziare a tutti con il parametro di applicazione, come in:

$ python manage.py celery worker -A myapp -l info 

dove myapp è il nome dato alla domanda quando ho creato il progetto con:

$ python manage.py startapp myapp 

L'errore che sto ottenendo è:

ImportError: No module named celery 

Qualcuno sa perché questo accade e come risolvere vero?

+3

L'argomento '-A' è per le applicazioni di sedano, non per le applicazioni di Django ... Al momento non vengono utilizzate da django-sedano. – asksol

+0

ah, non lo sapevo. Grazie per la risposta. Ma come posso eseguire questo? – Clara

+0

Celery 3.1 supporterà django da zero (ma non ha tutte le funzionalità di django-celery, e.g nessun backend dei risultati del database e nessun programma di pianificazione periodico del database, ma è ancora possibile utilizzare djcelery per ottenerlo) – asksol

risposta

14

Edit aprile 2014:

il sedano documenti sono stati aggiornati per 3.1; la soluzione qui di seguito è ormai superata, vedi:

http://docs.celeryproject.org/en/master/django/first-steps-with-django.html


Per impostazione predefinita, le ricerche di sedano per un modulo di nome celery.py per trovare la sua configurazione. È possibile ottenere il sedano a utilizzare un nome diverso da quello celery.py da specificare it on the app argument - in questo esempio, cercheremo di sedano config nella settings.py:

python manage.py celery worker --app=myapp.settings 

Quando si utilizza django-celery è possibile utilizzare la chiamata qui sopra per avviare il sedano, o fare come ho fatto in origine e creare un celery.py nel mio pacchetto di applicazioni myapp:

from settings import celery 

mio Django settings.py contiene il normale sedano config:

from celery import Celery 

celery = Celery(broker="amqp://guest:[email protected]:5672//") 

celery.conf.update(
    CELERY_DEFAULT_QUEUE = "myapp", 
    CELERY_DEFAULT_EXCHANGE = "myapp", 
    CELERY_DEFAULT_EXCHANGE_TYPE = "direct", 
    CELERY_DEFAULT_ROUTING_KEY = "myapp", 
) 

Quindi eseguire il lavoratore sedano in questo modo:

python manage.py celery worker --app=myapp 

Solo per amor di chiarezza, ecco la mia piena struttura dell'applicazione:

myproject/ 
    manage.py 
    myapp/ 
     __init__.py 
     settings.py 
     celery.py 
+2

sto votando +1 perché questo mi ha aiutato a capire che la configurazione del sedano è un po 'di magia nera e devo stare attento. Ma dovresti modificare la tua risposta perché è incoerente. Perché hai un file celery.py se stai impostando sedano in settings.py? O intendevi dire che lo stai creando in celery.py? – Milimetric

+0

Ho appena aggiornato la risposta, basandomi su una migliore comprensione che ora ho :) @Milimetric Ho un file celery.py che importa settings.py, come è quello che cerca il sedano per impostazione predefinita. – mafrosis

+0

Se il tuo codice funziona, ed è open source, un link sarebbe fantastico. Grazie per la modifica. – Milimetric

0

Assicurati si sta cercando di avviare il lavoratore sedano da una directory che ha accesso al modulo sedano. Nel mio caso stavo cercando di avviare il lavoratore dalla directory dell'app anziché dal progetto.