/ / Django + Celery 4 impostazioni errate - python, django, rabbitmq, sedano

Django + Celery 4 impostazioni errate - python, django, rabbitmq, sedano

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 № 1

La 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