Обновление живого сервера из VCS - PullRequest
0 голосов
/ 11 января 2009

Я управляю всеми своими сайтами Django как демоны SCGI. Я не буду вдаваться в основы того, почему я это делаю, но это означает, что когда сайт работает, существует набор процессов, выполняющихся с помощью следующей команды:

/websites/website-name/manage.py runfcgi method=threaded host=127.0.0.1 port=3036 protocol=scgi

Все хорошо, пока я не хочу выкатить новую версию от VCS (Bazaar в моем случае). Я создал скрипт псевдонима, который выполняет следующие действия:

alias up='bzr up; killall manage.py'

Это это общее по одной простой причине: я ленивый. Я хочу одну команду, которую я могу использовать на любом сайте, чтобы обновить его. В любом случае, я в большинстве случаев захожу на сервер, поэтому просто прыгаю в корень нужного сайта и вызываю up. Обновление сайта от BZR и перезапуски.

Первый недостаток - это уничтожение всех процессов manage.py на машине. В настоящее время 6 сайтов и быстро растут. Второе (и, возможно, еще хуже - по крайней мере, для конечных пользователей) - это крайне незначительный перезапуск. Если кто-то загружает изображение или делает что-то еще с длительным временем соединения, его запрос просто умирает на корню.

Так что я ищу предложения для одного метода, который:

  1. универсален для ленивых людей, таких как я (например, я могу запустить его из любого корня сайта, не запоминая, какую команду мне нужно вызывать; 'up' идеально подходит по имени.
  2. Убивает только текущий сайт. Я только обновляю текущий сайт, поэтому должен умереть только этот.
  3. Делает перезапуск изящно. Если возможно, следует подождать, пока больше не будет активных соединений. Я понятия не имею, насколько это возможно.

1 Ответ

2 голосов
/ 19 января 2009

Вместо того, чтобы убивать все с именем manage.py, не могли бы вы написать скрипт для каждого сайта, который убивает только процессы manage.py с этого сайта? (Изменить: просто напишите сценарии и поместите их в корень каждого сайта (который вы в любом случае перейдете на cd) и выполните эти & ndash; по-прежнему запоминается только одна команда)

Я не знаю достаточно о SCGI или Bazaar, чтобы предложить гораздо больше ... Мой метод (я тоже ленив) использует Mercurial и Fabric для развертывания: http://stevelosh.com/blog/entry/2009/1/15/deploying-site-fabric-and-mercurial/ & ndash; может быть, это даст вам идею, которую вы можете использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...