Rake开始是作为Ruby的构建包,但不局限于此,它可作为一个自动化工具。可用它在项目中作所有自动化任务。
Rake运行时,默认会在当前目录查找叫Rakefile的文件,里面有需要它执行的任务。
desc "Remove files whose names end with a tilde"
task :delete_unix_backups do
files = Dir['*~']
rm(files, verbose: true) unless files.empty?
end
desc与task是Rake定义的方法,task的名称是一个symbol。
调用这个Rake的方式:
rake delete_unix_backups(注意没有使用symbol-没有代冒号)。
如果有多个任务,可以定义一个任务来执行它们:
desc "Remove Unix and Windows backup files"
task :delete_backups =>[ :delete_unix_backups, :delete_windows_backups ] do
puts "All backups deleted"
end
上面的task方法,接收一个hash作为参数,它的key是任务名,value就是另外两个任务的列表。
对上面的代码进行重构,将删除的逻辑共用抽出来。
def delete(pattern)
files = Dir[pattern]
rm(files, verbose: true) unless files.empty?
end
desc "Remove files whose names end with a tilde"
task :delete_unix_backups do
delete "*~"
end
desc "Remove files with a .bak extension"
task :delete_windows_backups do
delete "*.bak"
end
desc "Remove Unix and Windows backup files"
task :delete_backups => [ :delete_unix_backups, :delete_windows_backups ] do
puts "All backups deleted"
end
如果Rake任务的名称叫default,在执行rake命令不输入参数时,会执行这个任务。
$rake -T 命令列出所有任务。