Активный файл настроек Django из Celery worker (как динамически установить DJANGO_SETTINGS_MODULE )

enter image description here Итак, я уже много искал по этому поводу, но не смог найти хорошего ответа. Я использую Celery celery и Django 3.2.13 . без пакета django-celery, так как новые версии Celery больше не требуют его. Мне удалось установить задачи и выполнить их с помощью Redis. Там все работает как надо. Однако, я интегрирую это в существующий, довольно большой, Django проект. Там мы указали несколько файлов настроек Django, а не один. Мы запускаем разные в зависимости от окружения, например, один для локальных машин и один для сервера. Моя проблема в том, что я не могу отследить, какой файл настроек "активен" из рабочего celery, который запускает файл celery.py в корне моего проекта (как указано в документации). Там документация требует указать файл настроек Django следующим образом:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', "celery_test.settings.development") Теперь это работает, но если я перемещаю материал локально, мне нужно изменить его на settings.local, чтобы заставить его работать, и так каждый раз. Чтение объекта settings во время выполнения, как я это делаю в стандартных файлах Django, не сработало, поскольку celery worker выполняется в другом процессе. Итак, используя эту ситуацию, есть ли у кого-нибудь идеи, как динамически получить активный файл настроек Django из celery worker? Или, возможно, передать его в качестве переменной при запуске celery worker? (как для Django, etc --settings=project.settings.local) Спасибо!

Я нашел решение для командной строки. При инициализации celery worker в командной строке, просто установите переменную окружения перед командой celery.

DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info

но я получаю ошибку

my commannd line 
DJANGO_SETTINGS_MODULE='celery_test.settings.development' celery -A celery_test worker -l info --pool=solo    

DJANGO_SETTINGS_MODULE=celery_test.settings.development : Термин 'DJANGO_SETTINGS_MODULE=celery_test.settings.development' не распознается как имя команды, функции, файла сценария или работающей программы. Проверьте правильность написания имени или, если был указан путь, проверьте правильность пути и повторите попытку. В строке:1 char:1

  • DJANGO_SETTINGS_MODULE='celery_test.settings.development' celery -A c ...
  •   + CategoryInfo          : ObjectNotFound: (DJANGO_SETTINGS...ngs.development:String) [], CommandNotFoundExcept 
    ion
      + FullyQualifiedErrorId : CommandNotFoundException
    
    
    

enter image description here

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