2010-12-18 242 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