Rakefileの中のtaskがちゃんと動くかどうかデバッグしたい。
--dry-run
オプションでtaskの依存関係のチェックとかはできるけど、taskの中身のチェックがしたい。
Rakefile
require 'rake'
def delete(file)
puts "delete file - #{file}" if ENV["DEBUG"]
rm file unless ENV["DEBUG"]
end
desc 'remove log-files'
task :remove do
Dir.glob('log/*.log').each do |f|
delete f
end
end
とりあえずこんな感じで、実際の処理をラッパーメソッドで包んでおいてrake remove DEBUG=1
とかやるとtaskの中身の確認ができるようにしてたんだけど、そんな事する必要なかったのでメモ。
rakeのsh
,ruby
,cp
,rm
,rm_rf
等の操作の多くはRake::FileUtilsExtに由来している。
Rakefile
require 'rake'
p method(:sh).owner # => Rake::FileUtilsExt
p method(:ruby).owner # => Rake::FileUtilsExt
p method(:rm).owner # => Rake::FileUtilsExt
p method(:rm_rf).owner # => Rake::FileUtilsExt
p method(:cp).owner # => Rake::FileUtilsExt
で、このRake::FileUtilsExt自体がnowrite_flagなる属性値を持っていて、元々処理の実行可否を切り替えられるようになってる。便利。
なので、最初のファイルはこれで十分だった。
Rakefile
require 'rake'
# for debug
nowrite true
desc 'remove log-files'
task :remove do
Dir.glob('log/*.log').each do |f|
rm f
end
end
デバッグが終わったら、nowrite true
をコメントアウトすれば良い。