Django celery: объект не имеет атрибута 'delay_on_commit'
джанго 4.2 с сельдереем 5.5.1
запуск задачи celery из представления django иногда приводит к тому, что объект 'generate_report' не имеет атрибута 'delay_on_commit'"
# tasks.py
from celery import shared_task
@shared_task
def generate_report(data):
# Code to generate report
...
# django view
def testview(request):
from tasks import generate_report
generate_report.delay_on_commit("mytestdata")
return render(request, "simple_page.html")
Это происходит в некоторых развертываниях, но не во всех. И когда это происходит, проблема решается перезагрузкой сервера (веб-приложения). Перенос импортируемого файла "generate_report" в начало файла также не помог.
Примечание: Код развертывается на pythonanywhere.com с несколькими обработчиками celery, выполняющими задачи "всегда включено".
Оказалось, что это была неправильная настройка, а не загрузка .env туда, куда он должен был быть загружен.
.env загружается в settings.py (django)
Но .env не был загружен в celery.py , поскольку предполагалось, что он уже загружен. Похоже, это не всегда так. Иногда celery.py запускается из скрипта _init_, в то время как файл .env не загружен.
Это приводит к тому, что celery запускается без действительного URL-адреса брокера, что вызывает проблемы с сетью. Эти проблемы с сетью вызывают проблемы для .delay() и .delay_on_commit()
Насколько я могу судить, это может быть проблема с версиями Celery. Вы пытаетесь использовать неподдерживаемую версию celery 5.5.1, поэтому вам нужно переключиться на 5.3. X и попробовать ее.
Поддерживаемые версии Celery для Django 4.2:
Сельдерей 5.2.x
Сельдерей 5.3.x