0

私たちのRAILS展開にはcapistranoを使用しています。最初に1台のサーバーに展開し、最初のサーバーで展開が完了したら、2台目のサーバーで展開を開始したいと考えています。私たちは遅れて順番に再起動したくありません。私たちは、一度に1つの完全な配備をしたいと考えています。これまでのところ私はこれを持っている:Capistranoは一度に1台のサーバーを展開します

namespace :deploy do 
    task :sequence do 
    on roles(:app), in: :sequence do |host| 
     invoke 'deploy' 
    end 
    end 
end 

問題は、それはターン中に並行して展開し、すべてのアプリケーションサーバーに対して展開呼び出しinvoke 'deploy' です。

最後にどのように特定のホストに対して展開タスクを呼び出すことができますか?

答えて

1

あなたはシーケンシャルモードでdeployタスクを実行するために役立つはずです後:

task :my_task, roles: :web do 
    find_servers_for_task(current_task).each do |server| 
    run "YOUR_COMMAND", hosts: server.host 
    end 
end 
1

私はその要件を持っていた場合、私は思いますおそらくスクリプトでは。 --hostsパラメータを指定してCapistranoを実行すると、実際にコマンドを実行するステージファイル(config/deploy/dev|stage|prod|somethingelse.rb)に記述したサーバーを定義できます。これには2つの形式があります。たとえば、test1、test2、prod1の3つのサーバーがあるとします。私はcap prod --hosts=test1,test2 deployのようなリストでそれを実行でき、test1とtest2だけがデプロイメントを受け取ります。 cap prod --hosts=^test deployのように、正規表現を使用して同じことを達成することもできます。

これは、ここに文書化されています。これによりhttp://capistranorb.com/documentation/advanced-features/host-filtering/

念頭に置いて、私はおそらく別のサーバーのために、毎回カピストラーノN時間を実行するスクリプト(またはMakefileを)書きたいです。

関連する問題