2010-12-18 172 views
2

我有2臺服務器。託管rails應用程序服務器和git存儲庫服務器。兩臺服務器與互聯網連接(不在同一臺主機上)。Capistrano從多個git存儲庫部署

導軌項目部署與capistrano。 有時遠程git存儲庫已關閉,我無法部署最新的更新。 我在rails服務器上也有克隆的存儲庫,所以當遠程存儲服務器關閉時,我可以將更改推送到rails服務器上的存儲庫。

什麼是配方,所以我可以選擇要獲取哪個存儲庫。

感謝

解決這個

回答

1

的一種方法是設置在運行中:repository變量。

也許在deploy:update之前設置了一個被調用的任務,它使用git ls-remote #{repository} #{branch}來檢查版本庫是否在那裏並作出響應。

像這樣的東西(這是未經測試,可能無法正常工作!)

set :repos, ["[email protected]:whatever/project.git", "[email protected]/repos/project.git"] 
set :branch, "master" 

task :select_repository do 
    repos.each do |repo| 
    if capture("git ls-remote #{repo} #{branch}") =~ /refs\/heads\/#{branch}/ 
     set :repository, repo 
     return true 
    end 
    end 
end 

before "deploy:update" do 
    select_repository 
end 
+0

謝謝你,這是非常有幫助的。但是如果遠程倉庫在本地被引用,而不是[email protected],倉庫路徑是/ home/user/path/to/repo – ahmy 2010-12-20 09:19:43

+0

你只需要在'if'塊內設置不同的變量。請參閱cap wiki上的[配置變量](https://github.com/capistrano/capistrano/wiki/2.x-Significant-Configuration-Variables)。 – idlefingers 2010-12-20 09:49:31