Selon this recent thread, Capistrano devrait pouvoir initialiser et mettre à jour vos sous-modules:
set :git_enable_submodules,1
dans doit être suffisamment config/deploy.rb, si vos .gitmodules
entrées sont à jour.
Vous pouvez avoir besoin de to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb
) pour vous assurer que vos sous-modules sont bien inclus.
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 vous avez nested submodules, vous devez:
gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules
juste besoin au moment de votre configuration de déploiement:
require 'Capistrano/deepmodules'
La gemme s'occupera de tout le reste automatiquement.
Vous pouvez supprimer :git_enable_submodules
de votre config, la gem ne fait pas attention à elle - si vous le souhaitez, vous êtes déjà en train de dire que vous voulez activer les sous-modules.
Et encore un détail à faire attention - pour l'instant seule la stratégie de cache à distance est supportée par la gemme. Cela signifie que vous devez ajouter à votre config
la ligne suivante:
set :deploy_via, :remote_cache
Il permet à la cache à distance et il est vraiment la chose que vous voulez faire de toute façon - déployer un grand codebases avec beaucoup de sous-modules et autres stuff est vraiment une expérience gênante si vous n'avez pas de cache côté serveur de celui-ci.