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
ある程度は実装に踏み込んでいることになってしまうので、多用すると後ではまるかもしれない。
トラックバック
トラックバックリンク:
http://arika.org/diary/trackbacks?article_id=capistrano%E3%81%AE%E3%82%BF%E3%82%B9%E3%82%AF%E5%90%8D%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E5%8B%95%E4%BD%9C%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B&day=02&month=12&year=2008