Django Celery Beat не отправляет задания на Celery Worker

Я использую Celery в Django для запуска задач через определенные промежутки времени. Когда я впервые запускаю Docker, все задачи выполняются без проблем. Если я останавливаю докер (т.е. docker-compose down), а затем перезапускаю докер (т.е. docker-compose up), celery-beat не отправляет задания на celery worker, чтобы они были выполнены.

Если я зайду в админ панель и отключу задачи, а затем снова включу их, то они начнут работать!

Также, если я не использую django_celery_beat.schedulers:DatabaseScheduler и позволяю celery beat использовать планировщик по умолчанию, он также работает. Хотя этот метод работает, это не лучший сценарий, поскольку задачи больше не редактируются в панели администратора Django

Есть ли решение этой проблемы?

Postgresql не является частью docker-compose. У меня есть родная установка PostgreSQL 10.5.

settings.py

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://redis:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS":{"max_connections":50, "retry_on_timeout": True}
        }
    }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
CELERY_TIMEZONE = "Europe/Amsterdam"
CELERY_TASK_TRACK_STARTED = True
CELERY_TASK_TIME_LIMIT = 30 * 60
CELERY_BROKER_URL="redis://redis:6379"
CELERY_CACHE_BACKEND = 'default'
CELERY_BEAT_SCHEDULE = {
    "sendemails_task":{
        "task":"demoapp.tasks.testing",
        "schedule":crontab(minute='*/2')
    },
}

docker-compose.yml

services:
  redis:
    image: redis
    restart: unless-stopped
    expose:
      - 6379
  web:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
    restart: unless-stopped
    command: gunicorn Project.wsgi:application --bind 0.0.0.0:8001 --workers=4 --preload
    volumes:
      - static_volume:/home/app/web/staticfiles
      - ./uploads/:/home/app/web/uploads/
    expose:
      - 8001
    env_file:
      - ./.env.prod
  celery:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
    command: celery -A Project worker -l info
    volumes:
      - ./app/:/usr/src/app/
    env_file:
      - ./.env.prod
    depends_on:
      - web
      - redis
  celery-beat:
    build:
      context: ./app
      dockerfile: Dockerfile.prod
    command: celery -A Project beat -l debug --scheduler django_celery_beat.schedulers:DatabaseScheduler
    volumes:
      - ./app/:/usr/src/app/
    env_file:
      - ./.env.prod
    depends_on:
      - web
      - redis
      - celery
volumes:
  static_volume:

tasks.py

from __future__ import absolute_import, unicode_literals
from celery.utils.log import get_task_logger
from celery import shared_task
from django.core.cache import cache
import time
import traceback


@shared_task
def testing():
    print('test')

celery.py

from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

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

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

Вернуться на верх