2009-06-04 22 views
13

Geçtiğimiz günlerde birkaç eklentimi alt modüller haline getirdim ve bir depoyu "klonladığınızda" alt modül dizinin boş olacağını fark ettim. Bu, ortak geliştiricilerin alt modüllerini başlatmaları ve güncellemeleri için mantıklıdır. AncakRayları uygulamaların alt modülleriyle nasıl dağıtabilirsiniz?

, ben sorunlara neden submodule kodu besbelli uygulamaya konmaz Capistrano'nun ile dağıtırken. Serbest bırakma dalına gidebilir ve init yapabilir ve buradaki modülü güncelleyebilirim, fakat bu kesinlikle ideal bir çözüm değildir.

Bunun nasıl işleneceği konusunda önerileri olan var mı? Bir capistrano görevi kadar basit mi?

Ben şeylerin üretim tarafında bir noob biraz duyuyorum.

Teşekkür ederiz!

cevap

12

this recent thread göre, capistrano senin submodules init ve güncellemek gerekir: En .gitmodules girişleri güncel olup olmadığını config

set :git_enable_submodules,1 

/deploy.rb, yeterli olmalı.
Alt modüllerin de dahil edilmesini sağlamak için to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb)'a ihtiyacınız olabilir. Eğer nested submodules varsa

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 

şunlar gereklidir:

gem sources -a http://gems.github.com 
$ sudo gem install morhekil-capistrano-deepmodules 

Sadece dağıtım yapılandırma anda buna ihtiyacı:

gerektirir 'capistrano/deepmodules'

Mücevher tüm kalanları otomatik olarak halledecektir. Eğer yapılandırmasındaki :git_enable_submodules silebilirsiniz
, mücevher buna hiçbir önem veriyor - bunu gerektiren eğer Zaten alt modüllerini etkinleştirmek istediğinizi söylüyorsunuz. sadece uzaktan önbellek strateji taş tarafından desteklenen anda -

Ve bir ayrıntı dikkat etmek. Bu sizin config aşağıdaki satırı eklemek ZORUNLU anlamına gelir:

set :deploy_via, :remote_cache 

Uzak önbellek sağlayan ve gerçekten yine yapmak istiyorum şey - Altmodüllerin ve diğer bir çok büyük codebases dağıtma sunucu tarafı önbelleğiniz yoksa, gerçekten sorunlu bir deneyim. başlıbaşına

5

set :git_enable_submodules, 1 Bu seçenekte olmadan işe yaramadı:

set :deploy_via, :remote_cache` 

Bu her yerde belgelenen gibi görünen ve anlamaya biraz zaman aldı vermedi. Altmodüller olmasa bile, bu seçeneğe sahip olmak genelde iyidir.

5

this commit ile Capistrano, hem Git alt modülleri hem de içinde pişirilen - iyi seçenek için destek sunar.

set :git_enable_submodules, true

Ve recursive Git submodules kullanırsanız, hem de bu ekleyin:: seyahatseverlerin Git altmodüller desteğini etkinleştirmek için, deploy.rb dosyaya eklemek bu

set :git_submodules_recursive, true

İlgili konular