2009-06-04 11 views
13

Niedawno zamieniłem kilka wtyczek w submoduły i zdałem sobie sprawę, że kiedy "git klonujesz" repozytorium, katalog modułów podległych będzie pusty. Ma to sens dla współautorów, którzy zainicjują swoje submoduły i zaktualizują.Jak radzisz sobie z wdrażaniem aplikacji szyny z submodułami?

Jednakże, gdy wdrażam z capistrano, kod modułu podległego oczywiście nie zostanie wdrożony, co powoduje problemy. Mógłbym wejść do działu wydania i zainicjować i zaktualizować moduł tam, ale to oczywiście nie jest idealne rozwiązanie.

Czy ktoś ma sugestie, jak sobie z tym poradzić? Czy jest to tak proste, jak zadanie capistrano?

Jestem trochę noobem po stronie produkcji rzeczy.

Dziękujemy!

Odpowiedz

12

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.

5

set :git_enable_submodules, 1 na jego własne nie działa bez tej opcji:

set :deploy_via, :remote_cache` 

To nie wydaje się być udokumentowane w dowolnym miejscu i zajęło mi trochę czasu, aby dowiedzieć się. Generalnie dobrze jest mieć taką opcję, nawet bez submodułów.

5

Z this commit, Capistrano obsługuje zarówno submoduły Git, jak i opcję --recursive zapakowaną.Aby włączyć obsługę git submodules, dodać to do pliku deploy.rb:

set :git_enable_submodules, true

A jeśli używasz recursive Git submodules, dodać to także:

set :git_submodules_recursive, true

Powiązane problemy