В Celery Task запрос соответствия MyModel не существует

Я пытаюсь запустить мое приложение django с помощью docker, который включает в себя celery. Я могу установить все на local и все работает отлично. Однако, когда я запускаю docker, и моя задача выполняется, возникает следующая ошибка:

myapp.models.mymodel.DoesNotExist: mymodel matching query does not exist.

Я совсем новичок в celery и docker, поэтому не уверен, что я делаю неправильно.

Celery настроен правильно, я убедился в этом. Ниже указаны broker_url и backend:

CELERY_BROKER_URL = 'redis://redis:6379/0' 
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_BACKEND = 'django-db'

Вот мой файл docker-compose.yml:

version: "3.8"

services:
  redis:
    image: redis:alpine
    container_name: rz01
    ports:
      - "6379:6379"
    networks:
      - npm-nw
      - braythonweb-network

  braythonweb:
    build: .
    command: >
      sh -c "python manage.py makemigrations &&
             python manage.py migrate &&
             gunicorn braython.wsgi:application -b 0.0.0.0:8000 --workers=1 --timeout 10000"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    restart: unless-stopped
    env_file: .env
    networks:
      - npm-nw
      - braythonweb-network

  celery:
    build: .
    restart: always
    container_name: cl01
    command: celery -A braython worker -l info
    depends_on:
      - redis
    networks:
      - npm-nw
      - braythonweb-network

networks:
  braythonweb-network:
  npm-nw:
    external: false

Я пробовал несколько вещей из разных постов на stackoverflow, например apply_async. Я также убедился, что моя модель существует.

Исключение говорит вам, что вы ищете запись в вашей базе данных, которая не существует (пока). Посмотрите любую функцию, в которой вы запрашиваете базу данных, и убедитесь, что вы создали нужную запись, прежде чем искать ее. Я предполагаю, что у вас есть таблица в базе данных для некоторой конфигурации, которая считывается в функции, но база данных пуста в начале.

Мне пришлось добавить следующее в контейнер с сельдереем, чтобы обеспечить доступ к нему:

volumes:
  - .:/code
Вернуться на верх