Итак, еще один способ запуска 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