skip to Main Content

I am trying to run my django application using docker which involves celery. I am able to set everything on local and it works perfectly fine. However, when I run it docker, and my task gets executed, it throws me the following error:

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

I am particularly new to celery and docker so not sure what am I doing wrong.

Celery is set up correctly, I have made sure of that. Following are the broker_url and backend:

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

This is my docker-compose.yml file:

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

I have tried few things from different stackoverflow posts like apply_async. I have also made sure that my model existed.

Update On further investigating the issue, I have noticed that the celery task does not get created in the database in the first place. Don’t know why, may be I have to the following with something else:

CELERY_RESULT_BACKEND = 'django-db'

2

Answers


  1. Chosen as BEST ANSWER

    I had to add the following to the celery container too to provide access to it:

    volumes:
      - .:/code
    

  2. The exception is telling you that you are looking for an entry in your database, that does not exist (yet). Look for any function where you query the database and make sure you create the needed entry before looking for it. I’m assuming you have a table in your database for some configuration, that is read in a function, but the database is empty at the beginning.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search