2013-03-01 28 views
7

ich eine django-Sellerie-Anwendung wie im Tutorial erstellt haben:Django Sellerie Anwendung - Kein Modul namens Sellerie Fehler

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

Alles funktioniert gut, wenn ich es ohne Anwendung Parameter ausführen, wie in:

$ python manage.py celery worker -l info 

aber ich kann es nicht starten mit dem Applikationsparameter, wie in:

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

wo myapp wird den Namen der Anwendung gegeben, wenn ich das Projekt mit erstellt:

$ python manage.py startapp myapp 

Der Fehler, ich bin immer ist:

ImportError: No module named celery 

Weiß jemand, warum dies geschieht und wie zu lösen es?

+3

'-A' Argument ist für Sellerie-Anwendungen, nicht für Django-Anwendungen ... Sie werden derzeit nicht von Django-Sellerie verwendet. – asksol

+0

ah, das wusste ich nicht. Danke für die Antwort. Aber wie kann ich das dann ausführen? – Clara

+0

Sellerie 3.1 unterstützt Django von Grund auf (hat aber nicht alle Eigenschaften von Django-Sellerie, e.g kein Datenbankergebnis Backend und kein periodischer Aufgabenplaner der Datenbank, aber Sie können immer noch djcellery oben verwenden, um das zu bekommen) – asksol

Antwort

14

bearbeiten April 2014:

Die Sellerie-Dokumentation für 3.1 aktualisiert worden sind; siehe die unten Lösung jetzt veraltet ist,:

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


standardmäßig Sellerie sucht nach einem Modul celery.py Namen seiner Konfiguration zu finden. Sie können erhalten Sellerie einen anderen Namen zu verwenden, als celery.py von angeben it on the app argument - in diesem Beispiel werden wir in settings.py für Sellerie Config aussehen:

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

Wenn django-celery verwenden Sie entweder den oben genannten Aufruf Sellerie starten können, oder tun, wie ich ursprünglich ein celery.py in meinem Anwendungspaket myapp tat und erstellen:

from settings import celery 

Meine Django settings.py enthält die normale Sellerie 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", 
) 

Dann den Sellerie Arbeiter wie folgt ausführen:

python manage.py celery worker --app=myapp 

Nur der Übersichtlichkeit halber, hier ist meine volle Anwendungsstruktur:

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

Ich stimme +1, weil dies mir geholfen hat zu erkennen, dass Sellerie-Konfig ein bisschen schwarze Magie ist und ich vorsichtig sein muss. Aber Sie sollten Ihre Antwort bearbeiten, weil sie inkonsistent ist. Warum haben Sie eine sellery.py-Datei, wenn Sie Sellerie in settings.py einrichten? Oder wolltest du sagen, dass du es in sellery.py aufstellst? – Milimetric

+0

Nur die Antwort aktualisiert, basierend auf einem besseren Verständnis habe ich jetzt :) @Milimetric Ich habe eine sellery.py-Datei, die settings.py importiert, wie das ist, was Sellerie standardmäßig sucht. – mafrosis

+0

Wenn Ihr Code funktioniert, und es Open Source ist, wäre ein Link großartig. Danke für die Bearbeitung. – Milimetric

0

Seien Sie sicher, dass Sie versuchen, den Sellerie Arbeiter starten aus ein Verzeichnis, das Zugriff auf das Sellerie-Modul hat. In meinem Fall habe ich versucht, den Worker aus dem App-Verzeichnis und nicht aus dem Projekt zu starten.