Как выполнить переключение версий приложения с помощью Buildout?

Мое приложение разработано с помощью Flask и использует buildout для изоляции зависимостей. Я планирую использовать Gunicorn и supervisord в качестве контейнера wsgi и диспетчера процессов, перед которым стоит Nginx, выполняющий балансировку нагрузки. Вот проблема при развертывании новой версии приложения: все встроено в подпапку, как перезапустить сервер пушки, чтобы переключение версий могло происходить изящно?

Конечно, я придумываю некоторые решения:

  1. Откажитесь от gunicorn и superviosrd и переключитесь на apache mod_wsgi, чтобы при развертывании новой версии я мог просто изменить папку в файле .wsgi, и сервер перезагрузится.

  2. Используйте virtualenv и установите в него gunicorn, supervisord, а также мой пакет приложений, поэтому при переключении версии я просто перезапускаю его с помощью supervisorctl.

Есть ли «чистый» способ сборки, который может решить эту ситуацию? Или любые используемые производственные решения будут оценены по достоинству.

Заранее спасибо.


person Ji ZHANG    schedule 05.08.2012    source источник
comment
Я не понимаю, почему вы не можете просто отправить HUP ганикорн. Разве это не аналог gunicorn touching файла wsgi для развертывания mod_wsgi?   -  person kojiro    schedule 05.08.2012
comment
@kojiro Gunicorn не установлен глобально. Каждый выпущенный пакет имеет свой собственный gunicorn и supervisord. Это трюк, я думаю.   -  person Ji ZHANG    schedule 05.08.2012


Ответы (1)


Как и в случае с вашим решением point-mod_wsgi-в-другой папке, вы можете сделать то же самое с gunicorn/buildout. Просто настройте последнюю сборку в другом каталоге, остановите старую пушку и запустите новую.

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

Альтернатива: настройте новый с другим номером порта, измените конфигурацию nginx и кикните ngnix, если вы действительно хотите, чтобы время простоя было равно нулю.

person Reinout van Rees    schedule 10.08.2012