2009-06-04 4 views
13

私は最近、私のプラグインのいくつかをサブモジュールに変え、リポジトリを "git clone"すると、サブモジュールディレクトリが空になることを認識しました。これは共同開発者がサブモジュールを初期化して更新するのに理にかなっています。サブモジュールを使用したレールアプリケーションの配備はどのように扱いますか?

しかし、私がcapistranoでデプロイすると、サブモジュールコードは明らかに配備されず、問題が発生します。私はリリースブランチとinitに入り、そこでモジュールを更新することができますが、それは明らかに理想的な解決策ではありません。

誰もこれを処理する方法についての提案はありますか?カピストラーノの仕事と同じくらい簡単ですか?

私は物事の生産面で少し騒がしいです。

ありがとうございました!

答えて

12

this recent threadによると、カピストラーノは、initのことができるようにし、あなたのサブモジュールを更新する必要があります:あなたの.gitmodulesエントリが最新である場合のconfig/deploy.rbで

set :git_enable_submodules,1 

は、十分なはずです。
サブモジュールが確実に含まれるようにするには、to patch Capistrano (lib/capistano/recipes/deploy/scm/git.rb)が必要な場合があります。

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 

あなたはnested submodulesを持っている場合は、次のものが必要です:

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

はちょうどあなたの展開の設定でそれを必要とします。

は 'カピストラーノ/ deepmodules'

が必要です

宝石は残りの部分を自動的に処理します。
あなたの設定から:git_enable_submodulesを削除することができます。宝石はそれには何の注意も払っていません。あなたがそれを要求しているなら、あなたはすでにサブモジュールを有効にしたいと言っています。

さらに注目すべきもう1つの詳細 - 現時点では、リモートキャッシュ戦略だけが宝石によってサポートされています。それはあなたのconfig次の行に追加しなければならないことを意味します

set :deploy_via, :remote_cache 

これは、リモート・キャッシュを有効にし、それは本当にあなたがとにかくやりたいことだ - サブモジュール及びその他の多くの大規模なコードベースを展開あなたがサーバー側のキャッシュを持っていなければ、物事は本当に面倒な経験です。それ自身の上

5

set :git_enable_submodules, 1は、このオプションなしでは動作しませんでした:

set :deploy_via, :remote_cache` 

これはどこでも文書化し、把握する私にしばらく時間がかかったように見えませんでした。サブモジュールがなくても、とにかくそのオプションを持つことは一般的には良いことです。

5

this commitとすると、CapistranoはGitサブモジュールと - recursiveオプションの両方をサポートしています。

set :git_enable_submodules, true

をそして、あなたはrecursive Git submodulesを使用する場合、同様にこれを追加します:Gitのサブモジュールのサポートを有効にするには、あなたのdeploy.rbファイルに以下を追加

set :git_submodules_recursive, true

関連する問題