Я работал над этой проблемой большую часть дня, и я надеюсь, что кто-то может указать мне правильное направление. Я создаю приложение с 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
Я надеюсь, что кто-то сталкивался с этим раньше. Ура!