ist ein wenig hängengeblieben und hat das Problem des asynchronen E-Mail-Versands gelöst. Ich würde gerne Sellerie und Django-Datenbank als Backend verwenden. da für das einzige Ding, das ich dieses Warteschlangenverwaltungswerkzeug für E-Mail verwenden möchte, habe ich auch django-sellery-email installiert.
Nach der Anleitung habe ich meine Einstellungsdatei aktualisiert:
%Vor%Ich verwende standardmäßig django SMTP mit solchen Einstellungen:
%Vor% Ich habe migrate für die beiden Apps djcelery
und komby
ausgeführt. Und jetzt wird mit der Standardmethode django send_mail
core keine E-Mail gesendet.
Wenn Sie die Option EMAIL_BACKEND
entfernen, funktioniert die E-Mail-Übertragung zwar, aber schrecklich langsam. WENN nicht für die Geschwindigkeit, würde ich nicht nach diesem Prozess an erster Stelle Schlange stehen.
Ich benutze die MySQL-Datenbank als Datenbank-Backend, und die Fehlerprotokolldatei hat beim Hinzufügen einer Aufgabe nichts angezeigt, also nehme ich an, dass dieser Teil in Ordnung ist. Es scheint mir, ich habe einige grundlegende Installation oder Konfiguration Teil vermisst, die leicht von einem erfahrenen Sellerie oder djcelery
Benutzer entdeckt werden kann, aber Neuling wie ich könnte verpasst haben.
UPDATE Django-Shell-Workaround:
%Vor%nach 5 Minuten Wartezeit (ohne Sellerie E-Mail-Versand dauert in der Regel etwa 10-15 Sekunden), bekomme ich immer noch:
%Vor%und nach 15 Minuten Formular letzte Überprüfung (20 alles in allem):
%Vor%Kann mir jemand bei diesem Problem helfen? Ich glaube fest, dass es etwas Einfaches ist.
Mit freundlichen Grüßen Sergey Aganezov.
Versuchen Sie, eine Shell zu öffnen, versuchen Sie, eine E-Mail mit dem E-Mail-Backend von djcelery zu senden, und überprüfen Sie result
.
Es sollte ein Standard Sellerie AsyncResult
sein, der Ihnen mehr Informationen darüber gibt, was passiert.
um aus den Dokumenten zu zitieren
results will be a list of celery AsyncResult objects that you may ignore, or use to check the status of the email delivery task, or even wait for it to complete if want. You have to enable a result backend and set ignore_result to False in CELERY_EMAIL_TASK_CONFIG if you want to use these. See the Celery docs for more info.
BEARBEITEN :
Normalerweise ist der Status PENDING für Aufgaben, die auf die Ausführung warten oder nicht bekannt sind.
Task is waiting for execution or unknown. Any task id that is not known is implied to be in the pending state
.
überprüfen Sie, dass Sie Ihre Mitarbeiter gestartet haben:
%Vor%Wenn Sellerie die Aufgabe normalerweise nicht an das Backend senden kann, wird ein Fehler ausgegeben, aber die Aufgabe bleibt ausstehend, bis ein Arbeiter sie ablegt.
Ich hatte ein ähnliches Problem wie in meinem Kommentar zu Ihrer Frage angegeben. In meinem Fall wurde die Aufgabe an eine andere Warteschlange gesendet, als der Worker gerade zuhörte. Standardmäßig hört der Worker die Warteschlange celery
ab, kann jedoch mit der Option '-Q' geändert werden. Die Aufgabe wird standardmäßig auch an die celery
-Warteschlange gesendet, allerdings hatte ich die Option 'Warteschlange' in CELERY_EMAIL_TASK_CONFIG
auf etwas anderes gesetzt, ohne zu merken, dass dies die Dinge kaputt machen würde. Sie können debuggen, an welche Warteschlange Ihre Aufgabe gesendet wird, indem Sie die Umgebungsvariable KOMBU_LOG_DEBUG=1
setzen und versuchen, eine E-Mail von manage.py shell zu senden. Ich habe die Einstellung "Warteschlange" gelöscht und die E-Mails wurden gestartet. Ich weiß nicht, ob Sie das gleiche Problem haben, aber hoffentlich hilft das beim Debuggen.
Tags und Links python django django-celery