2010-01-23 3 views
123

Обычно при использовании capistrano я буду вручную удалять старые версии из развернутого приложения. Я понимаю, что вы можете запустить cap deploy:cleanup, но это все еще оставляет 5 релизов. Это намеченная цель? Есть ли другой способ очистки старых версий до всего лишь одного предыдущего развертывания?Capistrano - очистка старых версий

+0

это всегда хорошая идея, чтобы сохранить некоторые предыдущие выпуски, то если вы в последний раз развернуть содержит большую ошибку, вы можете быстро откатить с Капистрано (крышка развёртывании: откате) к предыдущий релиз, пока вы его не исправите. – damoiser

ответ

150

Вы можете использовать переменную :keep_releases, чтобы переопределить значение по умолчанию 5. Проверьте this.

+0

Отлично. Это именно то, что я искал. Спасибо. – Josh

+4

Добро пожаловать! Вы могли бы просто принять ответ! :-) – jcrossley3

+2

@ Josh, определенно, примите этот ответ, если он решит вашу проблему. Вы оба получаете реплики таким образом. –

126

Вы могли бы сделать это автоматически, установив это в deploy.rb

set :keep_releases, 1 
after "deploy:update", "deploy:cleanup" 

В прошлом (я не знаю точно, какая версия) этот обратный вызов был по умолчанию, но позже разработчик решил оставить это пользователю решить. В capistrano 3 он был добавлен обратно к потоку развертывания по умолчанию.

+1

спасибо, Diego. Ваш ответ работает правильно в Capistrano v2.14.1. – scarver2

+1

Спасибо @diego, это действительно помогло! – gouravtiwari21

+1

Похоже, что [Capistrano 3 вызывает 'deploy: cleanup' как часть потока развертывания] (https://github.com/capistrano/capistrano/blob/690afc0c5c3c43d2920b0bfdeb9323c286b12106/lib/capistrano/tasks/deploy.rake#L23). – Dennis

38

Если вы хотите удалить все выпуски, за исключением последнего 3, например, вы можете запустить:

cap deploy:cleanup -s keep_releases=3 
+3

Не работает. 'optionParser :: InvalidOption: недопустимая опция: s' – Snowman

0

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

Я смог сделать это с помощью настраиваемой задачи. Создайте файл lib/capistrano/tasks/cleanup.rake и добавьте следующий код.

desc "Remove all but the last release" 
task :cleanup_all do 
    set :keep_releases, 1 
    invoke "deploy:cleanup" 
end 

Для запуска использовать bundle exec cap staging cleanup_all или cap staging cleanup_all