Rake簡(jiǎn)介
Rake的意思是Ruby Make,一個(gè)用ruby開發(fā)的代碼構(gòu)建工具.
但是,為什么Ruby需要Rake?
按理說(shuō)Ruby代碼無(wú)需編譯,應(yīng)該不需要Rake才對(duì)呀?原來(lái),Rake另有妙用,即把Rake當(dāng)做一個(gè)任務(wù)管理工具來(lái)使用...這樣做有兩個(gè)好處:
1.以任務(wù)的方式創(chuàng)建和運(yùn)行腳本
當(dāng)然,你可以用腳本來(lái)創(chuàng)建每一個(gè)你希望自動(dòng)運(yùn)行的任務(wù).但是,對(duì)于大型的應(yīng)用來(lái)說(shuō),你幾乎總是需要為數(shù)據(jù)庫(kù)遷移(比如Rails中db:migrate任務(wù))、清空緩存、或者代碼維護(hù)等等編寫腳本.對(duì)于每一項(xiàng)任務(wù),你可能都需要寫若干腳本,這會(huì)讓你的管理變得復(fù)雜.那么,把它們用任務(wù)的方式整理到一起,會(huì)讓管理變得輕松很多.
2.追蹤和管理任務(wù)之間的依賴
Rake還提供了輕松管理任務(wù)之間依賴的方式.比如,"migrate"任務(wù)和"schema:dump"任務(wù)都依賴于 "connect_to_database"任務(wù),那么在"migrate"任務(wù)調(diào)用之前,"connect_to_database"任務(wù)都會(huì)被執(zhí)行.
下面入正題吧,即如何用Rake編寫一個(gè)任務(wù)腳本..
順序執(zhí)行
在Rake中定義任務(wù)后,可以指定任務(wù)的執(zhí)行順序,例如,每天早晨起床后的例行公事:
1. 關(guān)閉鬧鐘
2. 梳洗打扮
3. 泡杯咖啡
4. 遛狗
上面的幾項(xiàng)事物,在Rakefile中這樣描述
task :turn_off_alarm do puts "Turned off alarm. Would have liked 5 more minutes, though." end task :groom_myself do puts "Brushed teeth." puts "Showered." puts "Shaved." end task :make_coffee do cups = ENV["COFFEE_CUPS"] || 2 puts "Made #{cups} cups of coffee. Shakes are gone." end task :walk_dog do puts "Dog walked." end task :ready_for_the_day => [:turn_off_alarm, :groom_myself, :make_coffee, :walk_dog] do puts "Ready for the day!" end
通過(guò)rake ready_for_the_day來(lái)執(zhí)行任務(wù),然后你就可以看到,所有的task都在按照你預(yù)定的順序在執(zhí)行。
Turned off alarm. Would have liked 5 more minutes, though. Brushed teeth. Showered. Shaved. Made 5 cups of coffee. Shakes are gone. Dog walked. Ready for the day!
此外還可以用過(guò)rake make_coffee COFFEE_CUPS=5這樣在命令中給變量賦值。
命名空間
上面那樣定義任務(wù)沒有問(wèn)題,但如果你需要另外定義些事物,比如工作相關(guān)的,交通相關(guān)的,這時(shí)候所有的任務(wù)混雜到一起顯然就不合適了,畢竟上面那些任務(wù)只是我們起床的例行事物,與其它無(wú)關(guān)。
通過(guò)namespace可以幫助我們定義出Rails中類似rake db:migrate的任務(wù),描畫出事物間清晰的邊界,將上面的任務(wù)包括在namespace的一個(gè)代碼塊中,如下
namespace :morning do task :turn_of_alarm .... end
這一次我們的調(diào)用命令就需要稍微做出些許變化,rake COFFEE_CUPS=3 morning:ready_for_the_day。 是不是跟rails中的rake任務(wù)調(diào)用方式很像呢?
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注