Według this recent thread, capistrano powinien móc init i zaktualizować submodules:
set :git_enable_submodules,1
w config/deploy.rb powinno wystarczyć, jeśli .gitmodules
wpisy są na bieżąco.
Możesz potrzebować to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb
), aby upewnić się, że twoje submodulki zostały włączone.
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
Jeśli masz nested submodules, trzeba:
gem sources -a http://gems.github.com
$ sudo gem install morhekil-capistrano-deepmodules
Wystarczy wymagają go w swojej konfiguracji Wdrożenie:
require 'capistrano/deepmodules'
Klejnot automatycznie zajmie się resztą.
Możesz usunąć :git_enable_submodules
ze swojej konfiguracji, klej nie zwraca na nią uwagi - jeśli go potrzebujesz, już mówisz, że chcesz włączyć submoduły.
I jeszcze jeden szczegół, na który należy zwrócić uwagę - w tej chwili gem jest obsługiwany tylko przez strategię zdalnego buforowania. Oznacza to, że należy dodać do swojej config
następującej linii:
set :deploy_via, :remote_cache
Umożliwia zdalne cache i to naprawdę rzeczą, którą chcesz zrobić w każdym razie - wdrażanie dużych codebases z wieloma submodułów i inne rzeczy są naprawdę kłopotliwe, jeśli nie masz pamięci podręcznej po stronie serwera.