2009-06-04 13 views
13

Recentemente ho trasformato un paio di miei plugin in sottomoduli e mi sono reso conto che quando si "cancella" un repository, la directory del sottomodulo sarà vuota. Questo ha senso per i co-sviluppatori per inizializzare i loro sottomoduli e aggiornare.Come gestite la distribuzione delle applicazioni delle guide con i sottomoduli?

Tuttavia, quando distribuisco con capistrano il codice del sottomodulo non verrà distribuito, il che causa problemi. Potrei andare nel ramo di rilascio e avviare e aggiornare il modulo lì, ma ovviamente non è una soluzione ideale.

Qualcuno ha suggerimenti su come gestirlo? È semplice come un compito capistrano?

Sono un po 'un noob sul lato della produzione delle cose.

Grazie!

risposta

12

Secondo this recent thread, Capistrano dovrebbe essere in grado di init e aggiornare i sottomoduli:

set :git_enable_submodules,1 

in config/deploy.rb dovrebbe essere sufficiente, se i vostri .gitmodules voci siano aggiornati.
Potrebbe essere necessario il to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb) per assicurarsi che i tuoi sottomoduli vengano inclusi.

def checkout(revision, destination) 
     git  = command 

     branch = head 

     fail "No branch specified, use for example 'set :branch, \"origin/master\"' in your deploy.rb" unless branch 

     if depth = configuration[:git_shallow_clone] 
     execute = "#{git} clone --depth #{depth} #{configuration[:repository]} #{destination} && " 
     else 
     execute = "#{git} clone #{configuration[:repository]} #{destination} && " 
     end 

     execute += "cd #{destination} && #{git} checkout -b deploy #{branch}" 

     if submodules = configuration[:git_enable_submodules] 
     execute += " && git-submodule init &&" 
     execute += "git-submodule update" 
     end 

     execute 
    end 

Se hai nested submodules, è necessario scaricare:

gem sources -a http://gems.github.com 
$ sudo gem install morhekil-capistrano-deepmodules 

richiedono solo a vostro config distribuzione:

richiedono 'Capistrano/deepmodules'

La gemma si prenderà cura di tutto il resto automaticamente.
È possibile eliminare :git_enable_submodules dal proprio config, la gemma non presta attenzione a questo - se lo stai richiedendo stai già dicendo che vuoi abilitare i sottomoduli.

E un ulteriore dettaglio a cui prestare attenzione - al momento solo la strategia di cache remota è supportata dalla gemma. Ciò significa che è necessario aggiungere al vostro config la seguente riga:

set :deploy_via, :remote_cache 

Esso consente la cache remota ed è davvero la cosa che si vuole fare in ogni caso - la distribuzione di grandi basi di codice con un sacco di sottomoduli e altri roba è davvero un'esperienza fastidiosa se non si ha una cache sul lato server.

5

set :git_enable_submodules, 1 su di essa la propria non ha funzionato senza questa opzione:

set :deploy_via, :remote_cache` 

Questo non sembra essere documentata da nessuna parte e mi ha portato un po 'per capire. In genere è comunque utile avere questa opzione, anche senza sottomoduli.

5

Con this commit, Capistrano supporta sia i sottomoduli Git sia l'opzione --recursive cotta in.Per abilitare il supporto Git sottomoduli, aggiungere questo al file deploy.rb:

set :git_enable_submodules, true

E se si utilizza recursive Git submodules, aggiungere anche questo:

set :git_submodules_recursive, true

Problemi correlati