単一の Capistrano タスクを呼び出して、さまざまな役割に対してさまざまなことを実行する方法を探しています。カピストラーノはこれを行うことができますか、それとも役割ごとに特定のタスクを作成する必要がありますか?
6 に答える
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
はい、個別のタスクを作成する必要がありますが、親タスクからそれらを呼び出すことができ、適切にフィルタリングされます。
実は違う:
% 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 コマンドなどに渡されますが、タスクが実際に起動されるかどうかには影響しないようです。
申し訳ありませんが、コメントにコメントを付ける方法が見つからなかったので、ここに書きました。
あなたもできる
task :foo do
run "command", :roles => :some_role
upload "source", "destination", :roles => :another_role
end
名前空間の使用: 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
方法があります。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
が、これは良い出発点です。