es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo cargar la configuración de Django para la aplicación de Celery.

Este es mi árbol (ocultando todo lo innecesario):

src/
├─ api/
│  ├─ app1/
│  │  ├─ tasks.py
│  │  ├─ models.py
│  ├─ celeryworker/
│  │  ├─ celery.py
│  ├─ settings.py
│  ├─ urls.py
├─ manage.py
├─ setup.py

Y luego este es mi celery.py

from future import absolute_import
from celery import Celery
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.settings')

app = Celery('portal')

app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

cuando intento ejecutar esta aplicación:

cd src/api
celery -A celeryworker worker --loglevel=INFO

Estoy obteniendo:

 ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

además, imprimir print(app.conf) parece no establecer ninguna de mis configuraciones CELERY_ que he especificado en src/api/settings.py
¿Cómo puedo hacer que mi trabajador celery lea correctamente las configuraciones de Django?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para que el worker de celery lea correctamente las configuraciones de Django, asegúrese de seguir los siguientes pasos:

    1. Verifique si RabbitMQ está siendo ejecutado en el puerto predeterminado 5672 ejecutando el siguiente comando: sudo service rabbitmq-server status. Si no está en ejecución, inícielo ejecutando sudo service rabbitmq-server start.
    2. Asegúrese de que las configuraciones BROKER_URL y CELERY_RESULT_BACKEND estén correctamente configuradas en el archivo settings.py de Django. Por ejemplo:

    BROKER_URL = 'amqp://guest:password@localhost:5672//'
    CELERY_RESULT_BACKEND = 'db+postgresql://username:password@localhost:5432/dbname'
    
    1. Actualice el archivo celery.py de la siguiente manera:
    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    
    # Establecer el módulo de configuración de Django predeterminado para el programa 'celery'.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'api.settings')
    
    app = Celery('api')
    
    # Usando una cadena aquí significa que el worker no tendrá que
    # hacer pickle del objeto al usar Windows.
    app.config_from_object('django.conf:settings', namespace='CELERY')
    
    # Cargar los módulos de tareas de todas las configuraciones de aplicaciones Django registradas.
    app.autodiscover_tasks()
    
    1. Asegúrese de que su entorno virtual esté activado antes de ejecutar el worker de celery para evitar conflictos entre diferentes versiones del mismo paquete.

    2. Ejecute el worker de celery ejecutando el siguiente comando desde el directorio src/api:

    celery -A celeryworker worker --loglevel=INFO
    

    Esto inicializará el worker de celery con las configuraciones de celery especificadas y leerá correctamente las configuraciones de Django.

Comments are closed.