LINUX.ORG.RU

Django managment commands

 


0

1

Добрый вечер. Пример ситуации. Есть проект на Django и есть некий сторонний сервис, который, должен отправлять некие данные в Django проект через, например, RabbitMQ. Чтобы получать данные из Rabbit'а пишем скрипт, который потом нужно интегрировать в Django проект. Ну и соответственно он (скрипт) должен иметь доступ к окружению django-проекта, для доступа к моделям, настройкам и т.п Как сейчас это сделано: 1. скрипт, который получает данные из RabbitMQ выполняется как managment command (python manage.py run_script) 2. чтобы скрипт работал в фоновом режиме использую супервизор runit.

Так-то все это крутится, работает. Но возник интерес, как кто-то реализует подобные вещи? Запуск скрипта через manage.py дает доступ к окружению проекта, общие модели, настройки и т.п - удобно. Но оправдано ли такое решение? В общем, прошу совета. Заранее спасибо.

Можно отправлять данные в джангу хттп-запросом. Можно запустить скрипт безо всяких manage.py, ничего волшебного там нет. Можно писать в базу данных мимо джанги. Тебя что-то конкретное смущает?

anonymous
()

Если работа скрипта сильно связана с моделями и вообще с самим проектом, то это нормальный способ.

Только зачем такой сложный передачи данных сейчас? Или там еще какой-то контроль выполнения есть?

gruy ★★★★★
()
Ответ на: комментарий от gruy

Это просто общий случай, не обязательно передачи данных, просто должен быть скрипт, который работает в фоновом режиме, но при этом должен иметь доступ к окружению джанго проекта.

hell_wood
() автор топика

как кто-то реализует подобные вещи?

1. скрипт, который получает данные из RabbitMQ выполняется как managment command (python manage.py run_script)

Обернул всё в tasks.py для Celery.

2. чтобы скрипт работал в фоновом режиме использую супервизор runit.

Запускаю celery как systemd-service.

ivn86
()
Ответ на: комментарий от ivn86

Так, а в Celery ты как обернул, можно подробнее?

hell_wood
() автор топика
Ответ на: комментарий от hell_wood

просто должен быть скрипт, который работает в фоновом режиме

Тогда все зависит от задачи. Какие-то я запускаю cron'ом через manage.py (например рассылка СМС об окончании действия услуги).

А есть задача по загрузке больших файлов с другого сервера по указанной ссылке - она уже отдельно запускается, когда пользователь дал команду.

gruy ★★★★★
()
Ответ на: комментарий от gruy

Ну, как частный случай, консумер кролика. Крон тут не подходит и ну ум приходит только скрипт manage.py, который постоянно бы крутился.

hell_wood
() автор топика

Не обязательно в managment пихать и целую команду пилить, для предоставления рандомному скрипту джанговского окружения можно сделать просто

manage.py shell < ./script.py

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.