Django,redis,rqworker,docker проблема с конфигурацией

Я пытаюсь использовать redis для постановки задач в очередь с помощью rqworker для бэкенда django, который также имеет приложение asgi. Я использовал daphne для запуска приложения asgi. Я пытаюсь докеризировать все приложение с помощью docker compose. Вот структура каталогов моего проекта Django:

docker-compose.yml

version: '3'

services:
  backend:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - redis

  worker:
    build: .
    environment:
      - DJANGO_SETTINGS_MODULE=backend.settings
    command: daphne -b 0.0.0.0 -p 8001 backend.asgi:application
    volumes:
      - .:/app
    depends_on:
      - redis

  worker2:
    build: .
    environment:
      - DJANGO_SETTINGS_MODULE=backend.settings
    command: python3 manage.py rqworker default
    volumes:
    - .:/app
    depends_on:
      - backend
      - redis

  redis:
    image: redis:latest
    ports:
      - "6379:6379"

Я столкнулся с такой проблемой:

(chai) narsimhar@Narsimhas-MacBook-Pro backend % docker-compose up
.....
.....
.....
.....
worker-1   |   File "/app/./backend/asgi.py", line 15, in <module>
worker-1   |     from users.routing import websocket_urlpatterns
worker-1   |   File "/app/./users/routing.py", line 3, in <module>
worker-1   |     from . import consumers
worker-1   |   File "/app/./users/consumers.py", line 8, in <module>
worker-1   |     from users.tasks import prep_text
worker-1   |   File "/app/./users/tasks.py", line 20, in <module>
worker-1   |     async def prep_text(text):
worker-1   |   File "/usr/local/lib/python3.10/site-packages/django_rq/decorators.py", line 28, in job
worker-1   |     queue = get_queue(queue)
worker-1   |   File "/usr/local/lib/python3.10/site-packages/django_rq/queues.py", line 164, in get_queue
worker-1   |     from .settings import QUEUES
worker-1   |   File "/usr/local/lib/python3.10/site-packages/django_rq/settings.py", line 12, in <module>
worker-1   |     raise ImproperlyConfigured("You have to define RQ_QUEUES in settings.py")
worker-1   | django.core.exceptions.ImproperlyConfigured: You have to define RQ_QUEUES in settings.py
worker-1 exited with code 1

релевантная информация:

settings.py

DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'channels',
    'users',
    'django_rq',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

RQ_QUEUES = {
    'default': {
        'HOST': 'redis',
        'PORT': 6379,
        'DB': 0,
        'DEFAULT_TIMEOUT': 360,
    },
}

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'channels.middleware.AuthMiddlewareStack',
]

ROOT_URLCONF = 'backend.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'backend.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_TZ = True



STATIC_URL = 'static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

ASGI_APPLICATION = 'backend.asgi.application'

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [('redis', 6379)],
        },
    },
}

tasks.py

from django_rq import job
import re
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
from users.rag import llm
from django.conf import settings
import os
import django


os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
settings.configure()
django.setup()


pattern = re.compile(r'[?.\s]*[A-Za-z\s]*\?')

@job
async def prep_text(text):
    processed_text = pattern.findall(text)
    x=''
    for item in processed_text:
            x+=item
    if x != '':
        await send_result(await llm.query(x))


async def send_result(result):
    from users.consumers import JobConsumer
    channel_layer = get_channel_layer()
    await channel_layer.group_send(
        f"result",
        {
            'type': 'send_result',
            'result': result,
        }
    )    

Кажется, я понимаю, что каким-то образом рабочий не может прочитать файл настроек django. Кто-нибудь может мне помочь?

Я пробовал изменять настройки и файлы конфигурации для служб docker, но мне не повезло. Я только начал изучать docker. Есть какие-нибудь мысли?

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