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 指令列出所有任務。
Martin Fowler寫的關于rake的文章