不一樣的rake文件當中不要定義重名的方法,否則無法調用數據庫
參考:http://www.jb51.net/article/81476.htm編程
Rake簡介vim
Rake的意思是Ruby Make,一個用ruby開發的代碼構建工具.緩存
可是,爲何Ruby須要Rake?ruby
按理說Ruby代碼無需編譯,應該不須要Rake纔對呀?原來,Rake另有妙用,即把Rake當作一個任務管理工具來使用...這樣作有兩個好處:bash
1.以任務的方式建立和運行腳本編程語言
固然,你能夠用腳原本建立每個你但願自動運行的任務.可是,對於大型的應用來講,你幾乎老是須要爲數據庫遷移(好比Rails中db:migrate任務)、清空緩存、或者代碼維護等等編寫腳本.對於每一項任務,你可能都須要寫若干腳本,這會讓你的管理變得複雜.那麼,把它們用任務的方式整理到一塊兒,會讓管理變得輕鬆不少.工具
2.追蹤和管理任務之間的依賴spa
Rake還提供了輕鬆管理任務之間依賴的方式.好比,"migrate"任務和"schema:dump"任務都依賴於 "connect_to_database"任務,那麼在"migrate"任務調用以前,"connect_to_database"任務都會被執行..net
下面入正題吧,即如何用Rake編寫一個任務腳本..
順序執行
在Rake中定義任務後,能夠指定任務的執行順序,例如,天天早晨起牀後的例行公事:
1. 關閉鬧鐘
2. 梳洗打扮
3. 泡杯咖啡
4. 遛狗
上面的幾項事物,在Rakefile中這樣描述
經過rake ready_for_the_day來執行任務,而後你就能夠看到,全部的task都在按照你預約的順序在執行。
此外還能夠用過rake make_coffee COFFEE_CUPS=5這樣在命令中給變量賦值。
命名空間
上面那樣定義任務沒有問題,但若是你須要另外定義些事物,好比工做相關的,交通相關的,這時候全部的任務混雜到一塊兒顯然就不合適了,畢竟上面那些任務只是咱們起牀的例行事物,與其它無關。
經過namespace能夠幫助咱們定義出Rails中相似rake db:migrate的任務,描畫出事物間清晰的邊界,將上面的任務包括在namespace的一個代碼塊中,以下
這一次咱們的調用命令就須要稍微作出些許變化,rake COFFEE_CUPS=3 morning:ready_for_the_day。 是否是跟rails中的rake任務調用方式很像呢?
默認Task
有了上面那些設置,若是咱們忘記或者不想寫詳細的任務名稱,直接執行rake會有什麼效果呢,結果是rake aborted!,任務被中斷的報錯。既然有這樣的可能性,咱們就須要消除這些隱患,經過設置default默認任務就能夠作到,以下:
當你直接執行rake命令時,會執行默認操做,幫咱們關閉鬧鐘。
描述你的Task
當任務漸漸變多之後,管理問題就暴露出來了,除了命名空間之外,咱們還須要文檔類的支持,幫助咱們梳理任務並顯示的告訴咱們每一個任務的目的和功能,這時你能夠試一試用desc描述任務。
上面的描述不只能夠在文檔中查看,同時使用rake -T也能清洗的瞭解到每一個任務是作什麼的。rake -T的輸出結果是按照字母順序排的序。
調取Task
Rake還容許在不一樣任務之間互相調用,例以下面的代碼,你想在下午也來杯咖啡,不用重複定義,直接使用上午的泡法,來一杯便可。
Rake腳本編寫
先來個簡單的例子,以下:
假設你是一個火星成員,老版本那些,即如燕兒虎跑之類的,在週末你打算去車車那邊打火鍋,而後集體PC去.對應這個狀況,你須要爲本身制定三個任務:搭車找車車、烤魚和網吧PC.用vim建立建立一個名叫rakefile的文件(備註:Rake會在當前路徑下尋找名叫Rakefile、rakefile、RakeFile.rb和rakefile.rb的rake文件),並鍵入以下代碼:
打開命令行工具,進入這個文件所在目錄,而後運行下面的命令,大體應該相似以下結果:
(備註:文字部分是沒啥邏輯的,純粹娛樂下...)
分析:
相信看完上面那段東東,你已經知道怎麼搞了...如今介紹些基礎知識,方便加深理解.從上面的代碼能夠知道,此文件一共定義了3個任務,desc是Rake定義的方法,表示對下面定義任務的描述.這個描述會在使用Rake --tasks(或者Rake -T)命令時輸出在屏幕上.
task是Rake最重要的方法.它的方法定義是:task(args, &block).任務體是一個block,本例中只是簡單輸出你所要作的工做.須要注意的是代碼
徹底是一個普通的Ruby語句,puts是Ruby中進行輸出的通常性方法,能夠看出,Rake任務能夠徹底使用Ruby的能力,這使得它很是強大.
go..go..go..go..
接下來加入依賴關係:
很顯然,在咱們定義的任務中,"烤魚"是依賴於"搭車去車車那裏"的(其它地方有沒烤魚吃不知道,反正地點就定在那了).那麼,咱們須要在咱們的任務定義中加入這個依賴關係,修改後的文件以下:
再次運行烤魚任務,你會獲得以下結果:
加入命名空間:
跟任何編程語言相似,當你的rake文件不少時,當你有不少任務的時候,你須要關注它們的命名衝突問題,命名空間(namespace)就是一個天然的解決方案.你能夠爲上面的三個任務定義一個叫作dan的命名空間.
再次運行rake --tasks,你會獲得以下的結果:
你如今須要使用rake dan:bitchfish才能啓動烤魚這個任務了.
(BTW,你能夠在你的rakefile中使用多個命名空間,對任務進行分類.)
瞭解了上面兩個知識點後,咱們來了解下兩個具體實例:
1.在一個任務中調用另一個任務
當任務衆多的時候,你極可能須要在一個任務中調用另一個任務,假設咱們把今天全部要作的工做定義爲一個任務:today.在這個任務中,有兩個任務須要被調用,一個是烤魚,一個是網吧PC.固然,因爲烤魚依賴於搭車去車車那裏,咱們仍是須要搭車去車車那裏的.在文件的頂部定義一個today的任務:
能夠看出,調用其它任務的方式很簡單,只須要調用
方法就能夠了.在命令行中啓動rake today,能夠獲得:
2.默認任務:
能夠爲Rake增長一個默認任務,這樣能夠簡單地用Rake命令來觸發這個默認任務,在上面的rakefile中,咱們能夠用以下方式把"today"任務做爲默認任務.
而後調用直接在命令行中調用rake,能夠獲得跟調用rake today一樣的輸出結果.
這就是咱們簡單的一個Rake任務定義,下面是完整的修改後的rakefile:
看完上面兩個例子,估計rake任務就算所有了解了...其它都是些代碼槍花罷了..多耍即是..
Rake簡介
Rake的意思是Ruby Make,一個用ruby開發的代碼構建工具.
可是,爲何Ruby須要Rake?
按理說Ruby代碼無需編譯,應該不須要Rake纔對呀?原來,Rake另有妙用,即把Rake當作一個任務管理工具來使用...這樣作有兩個好處:
1.以任務的方式建立和運行腳本
固然,你能夠用腳原本建立每個你但願自動運行的任務.可是,對於大型的應用來講,你幾乎老是須要爲數據庫遷移(好比Rails中db:migrate任務)、清空緩存、或者代碼維護等等編寫腳本.對於每一項任務,你可能都須要寫若干腳本,這會讓你的管理變得複雜.那麼,把它們用任務的方式整理到一塊兒,會讓管理變得輕鬆不少.
2.追蹤和管理任務之間的依賴
Rake還提供了輕鬆管理任務之間依賴的方式.好比,"migrate"任務和"schema:dump"任務都依賴於 "connect_to_database"任務,那麼在"migrate"任務調用以前,"connect_to_database"任務都會被執行.
下面入正題吧,即如何用Rake編寫一個任務腳本..
順序執行
在Rake中定義任務後,能夠指定任務的執行順序,例如,天天早晨起牀後的例行公事:
1. 關閉鬧鐘
2. 梳洗打扮
3. 泡杯咖啡
4. 遛狗
上面的幾項事物,在Rakefile中這樣描述
經過rake ready_for_the_day來執行任務,而後你就能夠看到,全部的task都在按照你預約的順序在執行。
此外還能夠用過rake make_coffee COFFEE_CUPS=5這樣在命令中給變量賦值。
命名空間
上面那樣定義任務沒有問題,但若是你須要另外定義些事物,好比工做相關的,交通相關的,這時候全部的任務混雜到一塊兒顯然就不合適了,畢竟上面那些任務只是咱們起牀的例行事物,與其它無關。
經過namespace能夠幫助咱們定義出Rails中相似rake db:migrate的任務,描畫出事物間清晰的邊界,將上面的任務包括在namespace的一個代碼塊中,以下
這一次咱們的調用命令就須要稍微作出些許變化,rake COFFEE_CUPS=3 morning:ready_for_the_day。 是否是跟rails中的rake任務調用方式很像呢?
默認Task
有了上面那些設置,若是咱們忘記或者不想寫詳細的任務名稱,直接執行rake會有什麼效果呢,結果是rake aborted!,任務被中斷的報錯。既然有這樣的可能性,咱們就須要消除這些隱患,經過設置default默認任務就能夠作到,以下:
當你直接執行rake命令時,會執行默認操做,幫咱們關閉鬧鐘。
描述你的Task
當任務漸漸變多之後,管理問題就暴露出來了,除了命名空間之外,咱們還須要文檔類的支持,幫助咱們梳理任務並顯示的告訴咱們每一個任務的目的和功能,這時你能夠試一試用desc描述任務。
上面的描述不只能夠在文檔中查看,同時使用rake -T也能清洗的瞭解到每一個任務是作什麼的。rake -T的輸出結果是按照字母順序排的序。
調取Task
Rake還容許在不一樣任務之間互相調用,例以下面的代碼,你想在下午也來杯咖啡,不用重複定義,直接使用上午的泡法,來一杯便可。
Rake腳本編寫
先來個簡單的例子,以下:
假設你是一個火星成員,老版本那些,即如燕兒虎跑之類的,在週末你打算去車車那邊打火鍋,而後集體PC去.對應這個狀況,你須要爲本身制定三個任務:搭車找車車、烤魚和網吧PC.用vim建立建立一個名叫rakefile的文件(備註:Rake會在當前路徑下尋找名叫Rakefile、rakefile、RakeFile.rb和rakefile.rb的rake文件),並鍵入以下代碼: