Según this recent thread, Capistrano debe ser capaz de init y actualizar sus submódulos:
set :git_enable_submodules,1
en config/deploy.rb debería ser suficiente, si sus .gitmodules
entradas están al día.
Puede necesitar to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb
) para asegurarse de que sus submódulos se incluyan.
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
Si tiene nested submodules, es necesario:
gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules
sólo requieren que a su configuración de despliegue:
requieren 'Capistrano/deepmodules'
La gema se encargará de todo el resto automáticamente.
Puede eliminar :git_enable_submodules
de su configuración, la gema no le presta atención; si lo está requiriendo, ya está diciendo que quiere habilitar submódulos.
Y un detalle más a tener en cuenta: por el momento, solo la estrategia de memoria caché remota es compatible con la gema. Esto significa que debe agregar a su config
la siguiente línea:
set :deploy_via, :remote_cache
que permite que el caché remota y es realmente lo que quiere hacer de todos modos - el despliegue de grandes bases de código con una gran cantidad de submódulos y otros cosas es realmente una experiencia problemática si no tienes un caché del lado del servidor.