Нет доступа к Django Модель из сельдерея в Docker - PullRequest
1 голос
/ 02 мая 2020

Я работал над этой проблемой большую часть дня, и я надеюсь, что кто-то может указать мне правильное направление. Я создаю приложение с django, и я начал возиться с его развертыванием на docker и использованием сельдерея для планирования задач. У меня есть сельдерей, выполняющий пользовательскую команду manage.py с помощью call_command один раз в минуту. Все работает! За исключением того, что я не могу получить доступ к django моделям из моей пользовательской команды django admin. Я попытался импортировать модель внутри моей функции, а также использовать get_model безрезультатно. Когда я делаю Model.objects.all (), запрос всегда пуст. Когда я пытаюсь получить указанный c объект с помощью Mode.objects.get (id = ##), он выдает ошибку. Команда отлично работает, когда я вызываю ее с помощью docker -compose -f docker -compose.yml exe c web python manage.py [custom-command], но не при запуске из сельдерея. Надеюсь, кто-то там знает об исправлении, потому что с тех пор, как я прочитал, кажется, это должно работать. Хорошо, достаточно поговорить здесь немного кода.

Вот мой docker составной файл для сельдерея

  redis:
    image: redis:alpine
  celery:
    build: ./app
    command: celery -A [appname] worker -l info
    volumes:
      - ./app/:/usr/src/app/
    environment:
      - DEBUG=1
      - SECRET_KEY=[secret-key]
      - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
    depends_on:
      - redis
  celery-beat:
    build: ./app
    command: celery -A [appname] beat -l info
    volumes:
      - ./app/:/usr/src/app/
    environment:
      - DEBUG=1
      - SECRET_KEY=[secret-key]
      - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
    depends_on:
      - redis

Вот мой celery.py

import os, [appname]

from celery import Celery


os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[appname].settings")

app = Celery("[appname]")
app.config_from_object("django.conf:settings", namespace="CELERY")
app.autodiscover_tasks()

Вот мои задачи.py

from celery import shared_task
from django.core.management import call_command

@shared_task
def some_function():
    call_command("[command-name]", )

TLDR; Пользовательская Django Администраторская команда не может получить доступ к моделям django при запуске в качестве запланированной задачи с использованием Celery

Я надеюсь, что кто-то сталкивался с этим раньше. Ура!

...