Беспроблемное развертывание в Rails - PullRequest
4 голосов
/ 21 января 2010

Я бы хотел без проблем обновить приложение Rails:

Значение:

  1. Если не нужно выполнять миграцию, я бы хотел прозрачно обновить код и не выполнять запросы 404 во время развертывания.
  2. Это сложно Я хотел бы иметь некоторый процесс, который может беспрепятственно обновить базу данных и в это время просто задерживать веб-запросы (ставить их в очередь), когда обновление базы данных выполнено позволить вещи до конца. (Мне нужно это только для коротких миграций - например, 5-10 секунд).

Как бы вы достигли этого?

Ответы [ 2 ]

3 голосов
/ 21 января 2010

Обновление только код

Если вы просто обновляете код приложения, пассажир должен позволить вам сделать это, не пропуская удар. Однако это не защитит вас, если обновление пойдет не так, для этого вам следует рассмотреть возможность использования двух или более веб-серверов с балансировкой нагрузки, которые можно обновлять по отдельности в циклическом режиме.

Обновление базы данных

Как пользователь, я бы предпочел видеть страницу "не работает", чем мой браузер вращается в течение 10 секунд. Если вы объясните, что время простоя будет порядка нескольких секунд, и установите автоматическое обновление страницы.

Если вы непреклонны в отношении отсутствия простоя при обновлении базы данных, у вас есть несколько вариантов:

  1. Вы можете реорганизовать базу данных таким образом, чтобы сохранить действующую старую схему. Это означает, что вы можете сохранить две версии вашего приложения в одной базе данных и со временем перейти на новую схему. Есть много статей о рефакторинге баз данных, большинство из которых выступают за использование триггеров / и т. Д. Для достижения желаемого результата. Лично я думаю, что это много усилий, а не много вознаграждения.

  2. В зависимости от вашего приложения вы можете быть сильно склонны к чтению и записи, что означает, что вы можете показать страницу «обслуживания» для некэшированных данных при обновлении базы данных (именно так Facebook обновляет свою базу данных). Это еще более эффективно, если большая часть ваших данных хранится в memcached или redis. В качестве альтернативы вы можете переключиться на ведомое устройство только для чтения базы данных и отключить любые действия записи.

Надеюсь, это поможет!

0 голосов
/ 21 января 2010

Вы должны взглянуть на Capistrano .

...