我最近把我的一些插件變成了子模塊,並意識到當你「克隆」一個倉庫時,子模塊目錄將是空的。這對於合作開發者初始化其子模塊和更新是有意義的。你如何處理部署rails子應用程序的應用程序?
但是,當我部署capistrano時,子模塊代碼顯然不會引起問題。我可以進入發佈分支並在那裏初始化和更新模塊,但這顯然不是一個理想的解決方案。
有沒有人有關於如何處理這個問題的建議?這與卡皮斯特拉諾的任務一樣簡單嗎?
我是一個在生產方面的小事。
謝謝!
我最近把我的一些插件變成了子模塊,並意識到當你「克隆」一個倉庫時,子模塊目錄將是空的。這對於合作開發者初始化其子模塊和更新是有意義的。你如何處理部署rails子應用程序的應用程序?
但是,當我部署capistrano時,子模塊代碼顯然不會引起問題。我可以進入發佈分支並在那裏初始化和更新模塊,但這顯然不是一個理想的解決方案。
有沒有人有關於如何處理這個問題的建議?這與卡皮斯特拉諾的任務一樣簡單嗎?
我是一個在生產方面的小事。
謝謝!
據this recent thread,Capistrano的應該能夠初始化和更新您的子模塊:
set :git_enable_submodules,1
在配置/ deploy.rb應該夠了,如果你的.gitmodules
條目是最新的。
您可能需要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
只是要求它在您的部署配置:
需要 'Capistrano的/ deepmodules'
寶石會自動處理所有其他的事情。
您可以從您的配置中刪除:git_enable_submodules
,gem不關注它 - 如果您需要它,您已經說過要啓用子模塊。還有一個要注意的細節 - 目前只有gem支持遠程緩存策略。這意味着你必須添加到您的
config
以下行:
set :deploy_via, :remote_cache
它使遠程緩存,它真的是你想反正做的事情 - 有很多子模塊和其它的部署大量的代碼庫如果你沒有服務器端緩存,東西真的很麻煩。
set :git_enable_submodules, 1
它自己沒有這個選項不工作:
set :deploy_via, :remote_cache`
這似乎沒有在任何地方記錄和我花了一段時間才能找出。無論如何,即使沒有子模塊,也總是有好的選擇。
對於this commit,Capistrano支持Git子模塊和-recursive選項。要啓用Git的子模塊的支持,添加到您的deploy.rb
文件:
set :git_enable_submodules, true
如果您使用recursive Git submodules,添加此還有:
set :git_submodules_recursive, true