Capistranoのタスク名に応じて動作を変える
Capistranoで実行中のタスクにはcurrent_task
でアクセスできる。これを使うと、タスク名に応じて挙動を変えるというようなこともできる。以下はRubyをインストールするためのスケルトン(のつもり)。
task :real_install_ruby do run "echo installing ruby #{install_ruby_version}..." # ... run "echo done" end def install_ruby_by_task(task) unless /_(\d_\d_\d)(?:_(p\d+))?$/ =~ task.name.to_s raise Error, "unexpected taskname: #{task.fully_qualified_name}" end pl = $2 ? "-#{$2}" : '' verstr = $1.split(/_/, 3).join('.') + pl set :install_ruby_version, verstr real_install_ruby end task :install_ruby_1_8_7_p72 do install_ruby_by_task(current_task) end
ある程度は実装に踏み込んでいることになってしまうので、多用すると後ではまるかもしれない。