13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rakefileのtaskをデバッグしたい

Posted at

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をコメントアウトすれば良い。

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?