Django: запуск при помощи xinetd

в 10:27, , рубрики: django, python, метки: ,

Итак, еще один способ запуска Django. Но зачем? Ведь уже каких только способов запуска нет. Казалось бы на любой вкус. Обоснование и описание — под катом.

Введение

Задумал я одну задумку. А именно, использовать веб приложения в качестве приложений на своем компьютере. Поскольку работаю с Python/Django, естественно и приложения писать используя именно их.

Что для этого нужно? Нужно запускать веб приложения с минимумом лишней работы. Все для этого вроде бы есть, Django может работать без сервера баз данных (используя SQLite), есть встроенный devserver, т.е. можно запускать веб приложения не устанавливая и настраивая вебсервер.

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

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

Итак, что хочется? Чтобы веб приложение начинало работать при обращении по его адресу, а при отсутствии обращений лежало бы себе спокойненько на жестком диске.

Предлагаемое решение

Тогда я вспомнил про xinetd. Этот сервер как раз делает то, что очень похоже на мою задачу:

  • Слушает сконфигурированные порты на локальном хосте.
  • При обращении по сконфигурированному заранее порту, стартует нужное приложение и передает принятый запрос на стандартный вход приложения.
  • Запущенное приложение передает ответ на свой стандартный выход, xinetd отдает ответ клиенту.

Все хорошо, только тут стандартный вход и выход, а Django общается с вебсервером по протоколу WSGI.

Скрипт

Итак, нужно написать скрипт, который будет с одной стороны общатся с xinetd через stdin/stdout, а с другой стороны, с моим приложением на Django, через WSGI.

Скрипт был написан и первая версия размещена на GitHub. Может кого-то он заинтересует, добро пожаловать.

Скачать скрипт можно на GitHub: django-xinetd

Установка и настройка описаны в README.

Заключение

Конечно, производительность такого решения ниже, чем с использованием вебсервера, однако меня вполне устраивает.

Это первая версия и конечно весьма сырая. Но для простейших случаев пользоваться можно.

Чуть не забыл, в качестве платформы используется Linux (Ubuntu). xinetd устанавливается командой:

apt-get install xinetd

Скрипт написан и испытан с Django v1.4 Это важно, так как в предыдущих версиях отличается работа со статическими файлами. C более ранними версиями, не будут обслуживаться статические файлы.

Автор: evgenyk

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js