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.