Capistrano развертывает, но вручную запускает миграции

Я использую Capistrano для развертывания приложения Rails. Я думаю о ситуации, когда произошли изменения в базе данных, поэтому я не могу просто cap deploy, потому что миграции необходимо выполнить до обновления кода. Я понимаю, что есть cap deploy:migrations, но это немного более автоматично, чем мне бы хотелось. Хотелось бы:

  1. Отправьте новый код в каталог релизов, но не обновляйте символическую ссылку и не перезапускайте приложение.
  2. ssh на сервер, запустите rake:db_abort_if_pending_migrations, чтобы убедиться, что миграции, которые я хочу запустить, являются единственными ожидающими, затем запустите rake db:migrate вручную.
  3. Завершите развертывание, обновив символическую ссылку и перезапустив приложение.

Есть ли простой способ сделать это с помощью встроенных задач Capistrano, или мне нужно будет написать свои собственные шаги по развертыванию для этого?

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


person jrdioko    schedule 08.03.2011    source источник


Ответы (1)


Пытаться:

  1. cap deploy:update_code

  2. Сделайте то, что вы описали, войдя на сервер вручную или через cap shell

  3. cap deploy:symlink deploy:restart

См. cap -e deploy:update_code deploy:symlink deploy:restart deploy:shell для получения дополнительной информации.

Надеюсь, это будет вам полезно.

person Szymon Jeż    schedule 09.03.2011
comment
Это должно сработать, спасибо! Есть ли где-нибудь документация по потоку задач в Capistrano (т.е. какие подзадачи в каком порядке действительно выполняет cap deploy)? - person jrdioko; 09.03.2011