17

単一の Capistrano タスクを呼び出して、さまざまな役割に対してさまざまなことを実行する方法を探しています。カピストラーノはこれを行うことができますか、それとも役割ごとに特定のタスクを作成する必要がありますか?

4

6 に答える 6

17

Capistrano でこれを行う標準的な方法:

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

はい、個別のタスクを作成する必要がありますが、親タスクからそれらを呼び出すことができ、適切にフィルタリングされます。

于 2009-04-15T23:31:54.580 に答える
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

:roles パラメータはさらに run コマンドなどに渡されますが、タスクが実際に起動されるかどうかには影響しないようです。

申し訳ありませんが、コメントにコメントを付ける方法が見つからなかったので、ここに書きました。

于 2011-06-20T00:11:47.413 に答える
3

あなたもできる

task :foo do
    run "command", :roles => :some_role
    upload "source", "destination", :roles => :another_role
end
于 2012-04-18T13:01:48.997 に答える
2

名前空間の使用: https://github.com/leehambley/capistrano-handbook/blob/master/index.markdown#namespacing-tasks

namespace :backup do

  task :default do
    web
    db
  end

  task :web, :roles => :web do
    puts "Backing Up Web Server"
  end

  task :db, :roles => :db do
    puts "Backing Up DB Server"
  end
end

これらのタスクは cap -T で次のように表示されます

backup:default 
backup:web
backup:db
于 2012-07-06T19:57:20.537 に答える
1

方法があります。http://weblog.rubyonrails.org/2006/8/30/capistrano-1-1-9-beta/を確認すると、ROLES 環境変数を使用してデフォルトのロールをオーバーライドできることがわかります。

次のように定義されたタスクがあります。

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

役割は 1 つの:testサーバーに割り当てられます。

コマンドラインで、次を実行できます。

[james@fluffyninja bin]$ cap echo_hello ROLES=lots_of_servers

タスクは、lots_of_servers ロールで実行されるようになります。

ハッシュを更新することにより、これが Ruby スクリプト内で機能することを確認していませんENVが、これは良い出発点です。

于 2012-03-16T22:01:12.523 に答える