2009-04-15 9 views

答えて

18

カピストラーノでこれを行うための標準的な方法は:

task :whatever, :roles => [:x, :y, :z] do 
    x_tasks 
    y_tasks 
    z_tasks 
end 

task :x_tasks, :roles => :x do 
    #... 
end 

task :y_tasks, :roles => :y do 
    #... 
end 

task :z_tasks, :roles => :z do 
    #... 
end 

そうです、あなたは別のタスクを記述する必要がありますが、あなたは親タスクからそれらを呼び出すことができますし、それらが適切にフィルタリングします。

+3

これは私にとってはうまくいかず、3つのタスクがすべて実行されます。 – aceofspades

+3

私のために働かなかった。すべてのタスクが実行されます。 –

+2

ここでは動作しません – Fluffy

5

実際には:

% cat capfile 
server 'localhost', :role2 
task :task1, :roles=>:role1 do 
    puts 'task1' 
end 
task :task2 do 
    task1 
end 

% cap task2 
    * executing `task2' 
    * executing `task1' 
task1 

:ロールPARAMはコマンドなどを実行するためにさらに渡されますが、タスクが実際に発射されるかどうかに影響を与えていないようです。

申し訳ありませんが、私はここにそれを書いたのでコメントにコメントを入れる方法を見つけられませんでした。

1

方法があります。 Check:http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/と表示され、ROLES環境変数を使用してデフォルトロールを上書きできることがわかります。

私はとして定義されたタスクがあります。:test役割は、1台のサーバーに割り当てられている

desc "A simple test to show we can ssh into all servers" 
task :echo_hello, :roles => :test do 
    run "echo 'hello, world!'" 
end 

を。コマンドラインで

、私は実行することができます。

[[email protected] bin]$ cap echo_hello ROLES=lots_of_servers 
を、タスクは現在lots_of_serversの役割上で実行されます。

これは、ENVハッシュを更新することでルビスクリプト内で動作することを確認していませんが、これは良いスタートです。

3

あなたはまた、

task :foo do 
    run "command", :roles => :some_role 
    upload "source", "destination", :roles => :another_role 
end 
1

、このようキャップ-Tに表示しますCapistrano 3を使用したソリューションになる可能性があります。

desc "Do something specific for 3 different servers with 3 different roles" 
task :do_something do 
    on roles(:api_role), in: :sequence do 
    # do something in api server 
    end 

    on roles(:app_role), in: :sequence do 
    # do something in application server 
    end 

    on roles(:another_role), in: :sequence do 
    # do something in another server 
    end 
end 

アプリケーションサーバに「do_something」タスクを実行するサーバの定義のようなものになります:

server 'application.your.domain', user: 'deploy', roles: %w{app_role} 

次に、あなたは意志タスク(それを行うには、いくつかの方法があります)、タスクを呼び出すことができます"app_role"に従って特定の命令を実行します。

関連する問題