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 implementar un trabajador de Celery en la plataforma de DigitalOcean App

Estoy tratando de añadir celery + redis a mi aplicación de Django alojada en la plataforma DO App. Entiendo que hay un problema con el que necesito lidiar y que está documentado aquí:
https://www.digitalocean.com/community/questions/is-there-an-issue-with-celery-on-app-platform

Mi problema es que ni siquiera puedo llegar a ese punto. Django celery y celery beat funcionan bien localmente, es decir, puedo programar y ejecutar tareas en segundo plano.
Inicio el trabajador de Celery usando:

celery -A my_project.celery worker -l info

Y el trabajador de Celery beat usando:

celery -A my_project beat -l info

No logro entender cómo hacer esto en la plataforma DO App.

Un par de tutoriales simplemente dicen que necesitas crear un trabajador en DO. ¿Qué significa exactamente esto? ¿No solo necesito ejecutar estos comandos de alguna manera? ¿Necesito otro entorno virtual o el trabajador usará el mismo que mi aplicación de Django (como lo hace localmente)? Cuando intento crear un trabajador en DO, me pide que cree otra aplicación.

¿Podría alguien mostrarme un ejemplo de cómo se supone que debe funcionar todo esto?

Muchas gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo problemas para configurar celery + redis en tu aplicación Django alojada en Digital Ocean App Platform. Has mencionado que has seguido la documentación, pero no puedes llegar al punto donde puedes programar y ejecutar tareas en segundo plano.

    Para configurar el trabajador de celery y celery beat en DO App Platform, necesitarás seguir los siguientes pasos:

    1. Agrega Celery y Redis a los servicios de DO App Platform: Para agregar Celery y Redis a los servicios de DO App Platform, necesitarás crear un nuevo archivo llamado “Procfile” en el directorio raíz de tu proyecto. En ese archivo, puedes agregar las siguientes líneas:
    web: gunicorn my_project.wsgi
    worker: celery -A my_project.celery worker -l info
    beat: celery -A my_project beat -l info
    redis: redis-server --bind 0.0.0.0 --port $PORT
    
    1. Despliega tu aplicación: Una vez que hayas agregado estas líneas a tu Procfile, puedes desplegar tu aplicación en Digital Ocean App Platform. En la plataforma, necesitarás crear una nueva aplicación y vincularla a tu repositorio de GitHub o repositorio de GitLab donde has almacenado tu proyecto Django.
    2. Escala los servicios de worker y beat: Después de desplegar tu aplicación, necesitarás escalar los servicios de worker y beat. Para ello, puedes ir a la sección “Servicios” en el panel de control de DO App Platform y hacer clic en el botón “Escalar” junto a tus servicios de worker y beat. Aumenta el número de instancias haciendo clic en el botón “+” junto al servicio relevante.

    3. Configura la URL de Redis: Dado que estás utilizando Redis como un intermediario de mensajes para celery, necesitarás configurar la URL de Redis en la configuración de tu proyecto Django. Puedes hacer esto agregando las siguientes líneas a tu archivo settings.py:

    import os
    
    REDIS_URL = os.environ.get('REDIS_URL', 'redis://localhost')
    
    CELERY_BROKER_URL = REDIS_URL
    CELERY_RESULT_BACKEND = REDIS_URL
    

    Después de agregar estas líneas, tu proyecto Django debería poder conectarse a Redis y utilizarlo como intermediario de mensajes para Celery. Con estos pasos, deberías poder ejecutar Celery y Redis en DO App Platform, y programar y ejecutar tareas en segundo plano.

    Si aún enfrentas problemas o tienes más preguntas, puedes consultar las preguntas y foros de la comunidad de Digital Ocean o contactar a su equipo de soporte.

Comments are closed.