Sto usando Django 1.10 e Celery 4.
Ho trovato delle perdite nella documentazione di Celery :(
La configurazione del lavoratore è ben fatta e funziona bene (posso vedere il lavoratore connesso in RabminMQ webmin). Ma i miei compiti non possono connettersi a RabbitMQ per pubblicare i loro messaggi.
settings.py
CELERY_BROKER_URL = "amqp://dev:dev@localhost/dev_virtualhost"
CELERY_ACCEPT_CONTENT = ["json"]
CELERY_TASK_SERIALIZER = "json"
CELERY_RESULT_SERIALIZER = "json"
celery.py
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
app = Celery("dev_app")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print("Request: {0!r}".format(self.request))
tasks.py
from celery import shared_task
@shared_task(queue="data_to_write")
def test_task(data):
open("/tmp/test", "w").write(data)
Dalla shell di Django eseguo questo codice e fallisco :(
test_task.delay("hello world")
AccessRefused: (0, 0): (403) ACCESS_REFUSED: il login è stato rifiutato utilizzando il meccanismo di autenticazione AMQPLAIN. Per dettagli vedi il file di log del broker.
Nei log RabbitMQ vedo che le credenziali sono guest: guest, no dev: dev come ho scritto in settings.py.
Dov'è il mio errore? Grazie
risposte:
1 per risposta № 1La soluzione consiste nel rinominare celery.py
a celery_app.py
per evitare l'importazione automatica.
Quindi devi eseguire il sedano in questo modo:
celery --app=PACKAGE.celery_app:app worker
PACKAGE è il modulo (cartella) in cui inserisci il file celery_app.py