Sellerie: die automatische Erkennung nicht finden, Aufgaben-Modul in der app
Habe ich im folgenden setup mit einem frisch installierten Sellerie und django 1.4:
settings.py:
import djcelery
djcelery.setup_loader()
BROKER_HOST = 'localhost'
BROKER_PORT = 5672
BROKER_USER = 'user'
BROKER_PASSWORD = 'password'
BROKER_VHOST = 'test'
[...]
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.admin',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'djcelery',
'south',
'compressor',
'testapp',
]
testapp/tasks.py:
from celery.task import task
@task()
def add(x, y):
return x + y
Zustellung der Nachricht an den celeryd funktioniert gut, aber die Aufgabe ist immer unregistrierte (also die automatische Erkennung scheint nicht zu funktionieren, richtig hier). Nur wenn ich das import-Modul Aufgaben, die in tasks/__init__.py
die Aufgabe wird gefunden und ich kann es benutzen.
Auch die Dokumentation war ein wenig verwirrend über den decorator importieren, aber ich denke das ist das richtige jetzt.
Wo ist der Fehler in meinem setup?
InformationsquelleAutor Martin | 2012-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies war ein bug in django-celery 2.5.4, bitte ein upgrade auf 2.5.5!
Ja, das hat geklappt 🙂
InformationsquelleAutor asksol
Hinzufügen
CELERY_IMPORTS
zu Ihrem settings.py:Importieren Sie alle Aufgaben in
testapp.tasks.__init__
DateiDann Sellerie importieren werden alle Aufgaben von der testapp.Aufgaben-Ordner und benennen Sie Sie so, wie Sie sind
__init__.py
von der app haben die Aufgabe, die Arbeit.Hatte das gleiche problem mit 2.5.5. Hinzufügen CELERY_IMPORTS für mich gearbeitet, aber nur zusammen mit einem expliziten argument name, in den Dekorateur. Einfach über @task() löst eine KeyError.
Dies funktioniert für mich, vielen Dank.
InformationsquelleAutor dgel
Ich hatte das gleiche Problem mit django 1.4.1 Sellerie 3.0.9 und fixiert es durch die Benennung der Aufgabe.
@task() -> @task(name= " testapp.Aufgaben.hinzufügen')
Ich musste neu starten Sellerie-client. Aber ich wusste nicht, weitere änderungen vorzunehmen.
Es scheint nicht zu funktionieren mit oben genannten Vorschlag.
InformationsquelleAutor jantzen05
Für jeden, der stolpert hier auf der Suche nach ähnlichen problem-Lösung.
In meinem Fall war es die Umschaltung vom alten Modul Grundlagen
INSTALLED_APPS
Einstellung auf eine neue AppConfig basierte Konfiguration.Um dies zu beheben, sollten Sie ändern die Weise, die Sie füttern Pakete Sellerie, wie hier angegeben, in der 2248 Sellerie Ausgabe:
Statt der alte Sellerie, 3-Weg:
app.autodiscover_tasks()
ja,zum Beispiel, wenn ich 'blog.apps.BlogConfig' in meinem INSTALLED_APPS,Sellerie nicht finden können.Ich habe zu 'blog' in INSTALLED_APPS, Sellerie finden
InformationsquelleAutor Janusz Skonieczny
Ich bin mir ziemlich sicher, dass Sie zum importieren der "Sellerie app-Instanz" und erklären, eine Aufgabe wie diese:
beachten Sie, dass es ein celery.py Datei in der project_dir/Projektname-Ordner, erklärt die Sellerie-Instanz, wie diese:
gemäß den Anweisungen in der offizielle Dokumentation.
außerdem müssen Sie registrieren Sie die Aufgabe, in einer von diesen drei Möglichkeiten:
bind=True
dem Dekorator wie:@app.task(bind=True)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
jedes Django-Anwendung Ordner enthalten kann tasks.py Datei, und die Aufgaben erklärt innerhalb es automatisch registriert
beachten Sie, dass änderungen der Aufgaben ERFORDERN EINE SELLERIE NEUSTART wirksam
Ich denke, müssen Sie manuell importieren Sie Ihre Aufgaben bis settings.py. Ich bin auf windows und mein Sellerie-version 3.1.25 . Ich löse das Problem mit den manuellen import
InformationsquelleAutor Iman Akbari