2010-01-23 10 views
123

Di solito quando si utilizza capistrano, andrò a eliminare manualmente le vecchie versioni da un'applicazione distribuita. Capisco che è possibile eseguire cap deploy:cleanup ma che lascia ancora 5 versioni. È questo è lo scopo previsto? C'è un altro modo per ripulire le vecchie versioni solo in una precedente distribuzione?Capistrano - ripulire vecchi rilasci

+0

è mai una buona idea per mantenere alcune versioni precedenti, quindi se lo scorso Deploy contiene un grosso errore si può rapidamente far ritirare con Capistrano (cap Deploy: rollback) al versione precedente fino a quando non la aggiusti. – damoiser

risposta

150

È possibile utilizzare la variabile :keep_releases per ignorare il valore predefinito di 5. Controllare this out.

+0

Grande. Questo è esattamente quello che stavo cercando. Grazie. – Josh

+4

Prego! Potresti aver appena accettato la risposta! :-) – jcrossley3

+2

@Josh, sicuramente, accetta questa risposta se ha risolto il tuo problema. Entrambi ottenete punti di ripetizione in questo modo. –

126

Si potrebbe fare questo automaticamente impostando questo nella vostra deploy.rb

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

In passato (non so esattamente quale versione) questo callback è il default, ma in seguito lo sviluppatore ha deciso di lasciare per decidere all'utente. In capistrano 3 è stato aggiunto nuovamente al flusso di distribuzione predefinito.

+1

Grazie, Diego. La tua risposta funziona correttamente in Capistrano v2.14.1. – scarver2

+1

Grazie a @diego questo mi ha davvero aiutato! – gouravtiwari21

+1

Sembra che [Capistrano 3 chiami 'deploy: cleanup' come parte del flusso di distribuzione] (https://github.com/capistrano/capistrano/blob/690afc0c5c3c43d2920b0bfdeb9323c286b12106/lib/capistrano/tasks/deploy.rake#L23). – Dennis

38

Se si desidera eliminare tutte le emissioni tranne l'ultimo 3 ad esempio è possibile eseguire:

cap deploy:cleanup -s keep_releases=3 
+3

Non funziona. 'optionParser :: InvalidOption: opzione non valida: s' – Snowman

0

Ho avuto un problema simile. Volevo mantenere le 5 versioni per le normali implementazioni, ma era necessario che alcune situazioni potessero rimuovere tutte le versioni precedenti.

Sono riuscito a farlo con un'attività personalizzata. Creare un file lib/capistrano/tasks/cleanup.rake e aggiungere il seguente codice.

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

Per eseguire l'uso bundle exec cap staging cleanup_all o cap staging cleanup_all