Boggy:
Если у вас запущен один процесс, он будет корректно завершен (обслуживать все запросы в своей очереди, которая должна быть только 1, если вы используете правильное распределение нагрузки). Проблема в том, что вы не можете запустить новый сервер, пока старый не умрет, поэтому ваши пользователи будут стоять в очереди в балансировщике нагрузки. То, что я нашел успешным, - это «каскад» или повторный перезапуск шавок. Вместо того, чтобы останавливать их все и запускать их все (поэтому запросы в очереди до тех пор, пока один монгрел не будет сделан, остановлен, перезапущен и принимает соединения), вы можете остановить, а затем запустить каждого монгрела последовательно, блокируя вызов для перезапуска следующего монгрела, пока предыдущий не будет резервное копирование (используйте реальную проверку HTTP для контроллера / состояния). По мере того, как ваши шавки рушатся, не работает только одна за раз, и вы работаете на двух базах кода - если вы не можете этого сделать, вам следует на минуту открыть страницу обслуживания. Вы должны быть в состоянии автоматизировать это с помощью capistrano или любого другого инструмента развертывания.
Итак, у меня есть 3 задачи:
cap: deploy - который выполняет традиционный метод перезапуска все одновременно, с помощью ловушки, которая поднимает страницу обслуживания и затем снимает ее после проверки HTTP.
cap: deploy: roll - который выполняет этот каскад по всей машине (я извлекаю информацию из iClassify, чтобы узнать, сколько шавок на данной машине) без страницы обслуживания.
cap deploy: migrations - что делает обслуживание страниц + миграцию, так как обычно плохая идея запускать миграции "вживую".