Из всех способов развертывания проектов Django мой любимый — FastCGI. Он поддерживается большинством веб-серверов, позволяет четко разграничивать права доступа и имеет множество других преимуществ.
Однако реализация django не лишена недостатков.
Чтобы запустить сервер FastCGI, вам необходимо запустить «.
/manage.py runfcgi» с немалым количеством параметров, которые, даже если вы их помните, вам точно не захочется каждый раз прописывать их вручную.
А если это происходит в контексте обновления кода проекта на рабочем сервере, то команд становится еще больше.
Приходится писать различные обертки для запуска и перезапуска, которые засоряют проект. Кстати, перезагрузка, которую мы выполняем для обновления кода, связана с другой проблемой.
Django не обеспечивает плавный перезапуск сервера FastCGI. Вы можете только убить старый процесс и затем запустить новый.
Это происходит не мгновенно, поэтому в промежутке времени между смертью старого процесса и открытием порта новым процессом посетители видят ошибку 502, что, конечно же, не повышает их уровень доверия к вашему сайту.
.
Приходится придумывать разные хитрости и усложнять скрипты-обертки.
Из одного из этих скриптов выросло достаточно универсальное приложение django_graceful, решающее все эти проблемы.
Идея проста: настройки FastCGI хранятся в файле settings.py, а для управления процессами FastCGI используются простые команды из Manage.py. Эти команды поддерживают несколько параллельно работающих экземпляров сервера FastCGI и позволяют переключать веб-сервер между ними с помощью символической ссылки на файл unix-сокета, то есть без перезапуска веб-сервера.
Именно это обстоятельство позволяет нам проделать такой трюк: когда нам нужно обновить код, мы одной командой перезапускаем процесс FastCGI, к которому веб-сервер в данный момент не обращается, а затем, когда он снова будет готов обслуживать запросы, переключаем символическая ссылка на него.
Клиенты, подключавшиеся до переключения, продолжают обслуживаться первым сервером FastCGI, а новые — вторым.
Для этого действия вам даже не нужны права администратора сервера.
Тесты показали, что перебоев в обслуживании не будет даже при очень плотном потоке запросов.
Кстати, приложение впервые использовалось на проекте о зарубежной недвижимости.
Ру и до сих пор там прекрасно работает.
Как его установить?
- Само приложение можно загрузить и установить с помощью команды easy_install django_graceful.
- Затем имя приложения «django_graceful» необходимо добавить в список INSTALLED_APPS вашего проекта.
- В файл settings.py нужно добавить еще одну опцию — GRACEFUL_STATEDIR. Он должен содержать абсолютный путь к папке, в которой будут храниться файлы .
pid и .
socket процессов FastCGI.
- Вы также можете добавить словарь GRACEFUL_OPTIONS в settings.py, указав в нем дополнительные параметры для команды «.
/manage.py runfcgi».
- В папке GRACEFUL_STATEDIR будет создана символическая ссылка «fastcgi.socket», путь к которой необходимо указать в конфигурации веб-сервера.
Например, «FastCGI_pass unix:/home/web/project/var/run/fastcgi.socket» в nginx.
Как использовать
Перечислим типичные задачи, которые упрощает django_graceful.Первоначальный запуск и поддержка сервера FastCGI в работающем состоянии:
./manage.py keepalive — это команда, которая проверяет, запущен ли хотя бы один процесс FastCGI и указывает ли на него ссылка.
Если ни один процесс не запущен, запускается первый.
Если ссылка указывает на неработающий процесс, команда переключает ее на сокет работающего процесса.
В противном случае это ничего не делает. Мне нравится добавлять эту команду в crontab, чтобы она запускалась раз в минуту.
Он поднимет FastCGI после неожиданного сбоя или незапланированной перезагрузки сервера.
Плавный перезапуск FastCGI после обновления кода:
./manage.py update — это команда, которая выполняет описанный выше трюк, перезапуская неактивный процесс FastCGI и устанавливая ссылку на него.
Полный список команд
- start – запускает выбранные процессы;
- стоп – останавливает выбранные процессы;
- переключатель — переключает символическую ссылку на указанный процесс;
- Keepalive — проверяет, есть ли хотя бы один запущенный и активный процесс;
- перезапуск – перезапускает указанные процессы;
- статус – показывает статусы процессов;
- update – перезапускает неактивный процесс и устанавливает на него ссылку;
-
Как Я Работал В Дубае
19 Oct, 24 -
Сок Для Новичков. Задачи Soc: Мониторинг
19 Oct, 24 -
Снег На Рабочем Столе
19 Oct, 24