2010-12-18 18 views
2

私は2台のサーバを持っています。ホストされたレールアプリサーバーとgitリポジトリサーバー。 2台のサーバーはインターネットに接続されています(同じホスト上にはありません)。複数のgitリポジトリから展開するCapistrano

railsプロジェクトにはcapistranoが導入されています。 リモートgitリポジトリがダウンしている場合、最新のアップデートを展開できませんでした。 私はまた、リポジトリサーバー上のリポジトリをクローンしています。そのため、リモートリポジトリサーバーがダウンしているときに、代わりに自分の変更をレールサーバー上のリポジトリにプッシュできます。

レシピとは何なので、フェッチするリポジトリを選択できます。

おかげで、このアプローチする

答えて

1

一つの方法は、その場で:repository変数を設定することです。

おそらくgit ls-remote #{repository} #{branch}を使用するdeploy:updateの前に呼び出されるタスクを設定して、リポジトリが存在し、応答しているかどうかを確認してください。この(!これはテストされていないと動作しない場合があります)よう

何か:

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

+0

'if'ブロック内に異なる変数を設定するだけで済みます。キャップwikiの[設定変数](https://github.com/capistrano/capistrano/wiki/2.x-Significant-Configuration-Variables)を参照してください。 – idlefingers

関連する問題