亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby中任務構建工具rake的入門學習教程

2020-02-24 15:38:41
字體:
來源:轉載
供稿:網友

Ruby方法與其他編程語言中的函數是非常相似,其實Ruby方法用于將一個或多個重復語句捆綁到一個單元中,一起跟著武林技術頻道小編進入下文學習Ruby中任務構建工具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中這樣描述

?

 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


通過rake ready_for_the_day來執行任務,然后你就可以看到,所有的task都在按照你預定的順序在執行。

 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!


此外還可以用過rake make_coffee COFFEE_CUPS=5這樣在命令中給變量賦值。

命名空間

上面那樣定義任務沒有問題,但如果你需要另外定義些事物,比如工作相關的,交通相關的,這時候所有的任務混雜到一起顯然就不合適了,畢竟上面那些任務只是我們起床的例行事物,與其它無關。

通過namespace可以幫助我們定義出Rails中類似rake db:migrate的任務,描畫出事物間清晰的邊界,將上面的任務包括在namespace的一個代碼塊中,如下

 namespace :morning do  task :turn_of_alarm  .... end


這一次我們的調用命令就需要稍微做出些許變化,rake COFFEE_CUPS=3 morning:ready_for_the_day。 是不是跟rails中的rake任務調用方式很像呢?

默認Task

有了上面那些設置,如果我們忘記或者不想寫詳細的任務名稱,直接執行rake會有什么效果呢,結果是rake aborted!,任務被中斷的報錯。既然有這樣的可能性,我們就需要消除這些隱患,通過設置default默認任務就可以做到,如下:

 task :default => 'morning:turn_off_alarm'


當你直接執行rake命令時,會執行默認操作,幫我們關閉鬧鐘。

描述你的Task

當任務漸漸變多以后,管理問題就暴露出來了,除了命名空間以外,我們還需要文檔類的支持,幫助我們梳理任務并顯示的告訴我們每個任務的目的和功能,這時你可以試一試用desc描述任務。

 ... desc "Make coffee" task :make_coffee do  cups = ENV["COFFEE_CUPS"] || 2  puts "Made #{cups} cups of coffee. Shakes are gone." end ...


上面的描述不僅可以在文檔中查看,同時使用rake -T也能清洗的了解到每個任務是做什么的。rake -T的輸出結果是按照字母順序排的序。

 rake morning:make_coffee    # Make coffee


調取Task

Rake還允許在不同任務之間互相調用,例如下面的代碼,你想在下午也來杯咖啡,不用重復定義,直接使用上午的泡法,來一杯即可。

namespace :afternoon do  task :make_coffee do   Rake::Task['morning:make_coffee'].invoke   puts "Ready for the rest of the day!"  end end


Rake腳本編寫

先來個簡單的例子,如下:

假設你是一個火星成員,老版本那些,即如燕兒虎跑之類的,在周末你打算去車車那邊打火鍋,然后集體PC去.對應這個情況,你需要為自己制定三個任務:搭車找車車、烤魚和網吧PC.用vim創建創建一個名叫rakefile的文件(備注:Rake會在當前路徑下尋找名叫Rakefile、rakefile、RakeFile.rb和rakefile.rb的rake文件),并鍵入如下代碼:

desc "任務1 -- 搭車去車車那里"#這據說是個苦差,因為太遠了 task :busboy do puts "發現挫男" end  desc "任務2 -- 烤魚" task :bitchfish do puts "老板,先烤九斤魚" end  desc "任務3 -- 網吧PC" task :pc do puts "我選中路" end 

?

打開命令行工具,進入這個文件所在目錄,然后運行下面的命令,大致應該類似如下結果:

D:/work>rake busboy (in D:/work) 發現挫男  D:/work>rake bitchfish (in D:/work) 老板,先烤九斤魚  D:/work/ruby_works/ruby_book>rake laundry (in D:/work) 我選中路 


(備注:文字部分是沒啥邏輯的,純粹娛樂下...)

分析:

相信看完上面那段東東,你已經知道怎么搞了...現在介紹些基礎知識,方便加深理解.從上面的代碼可以知道,此文件一共定義了3個任務,desc是Rake定義的方法,表示對下面定義任務的描述.這個描述會在使用Rake --tasks(或者Rake -T)命令時輸出在屏幕上.

D:/work>rake --tasks (in D:/work) rake bitchfish #任務2 -- 烤魚 rake busboy #任務1 -- 搭車去車車那里(這據說是個苦差,因為太遠了) rake pc 任務3 -- 網吧PC 

?


task是Rake最重要的方法.它的方法定義是:task(args, &block).任務體是一個block,本例中只是簡單輸出你所要做的工作.需要注意的是代碼

puts "發現挫男" 


完全是一個普通的Ruby語句,puts是Ruby中進行輸出的一般性方法,可以看出,Rake任務可以完全使用Ruby的能力,這使得它非常強大.

go..go..go..go..

接下來加入依賴關系:

很顯然,在我們定義的任務中,"烤魚"是依賴于"搭車去車車那里"的(其它地方有沒烤魚吃不知道,反正地點就定在那了).那么,我們需要在我們的任務定義中加入這個依賴關系,修改后的文件如下:

desc "任務1 -- 搭車去車車那里" task :busboy do puts "發現挫男" end  desc "任務2 -- 烤魚" task :bitchfish => :busboy do puts "老板,先烤九斤魚" end  desc "任務3 -- 網吧PC" task :pc do puts "我選中路" end 

?

再次運行烤魚任務,你會得到如下結果:

D:/work>rake bitchfish (in D:/work) 發現挫男 老板,先烤九斤魚 

加入命名空間:

跟任何編程語言類似,當你的rake文件很多時,當你有很多任務的時候,你需要關注它們的命名沖突問題,命名空間(namespace)就是一個自然的解決方案.你可以為上面的三個任務定義一個叫做dan的命名空間.

namespace :dan do desc "任務1 -- 搭車去車車那里" task :busboy do puts "發現挫男" end …… end 

?

再次運行rake --tasks,你會得到如下的結果:

D:/work >rake --tasks (in D:/work) rake dan:bitchfish # 任務2 -- 烤魚 rake dan:pc # 任務3 -- 網吧PC rake dan:busboy # 任務1 -- 搭車去車車那里 


你現在需要使用rake dan:bitchfish才能啟動烤魚這個任務了.
(BTW,你可以在你的rakefile中使用多個命名空間,對任務進行分類.)

了解了上面兩個知識點后,我們來了解下兩個具體實例:

1.在一個任務中調用另外一個任務

當任務眾多的時候,你很可能需要在一個任務中調用另外一個任務,假設我們把今天所有要做的工作定義為一個任務:today.在這個任務中,有兩個任務需要被調用,一個是烤魚,一個是網吧PC.當然,由于烤魚依賴于搭車去車車那里,我們還是需要搭車去車車那里的.在文件的頂部定義一個today的任務:

desc "今天的任務" task :today do Rake::Task["dan:bitchfish"].invoke Rake::Task["dan:pc"].invoke end  namespace :dan do …… end 

?

可以看出,調用其它任務的方式很簡單,只需要調用

Rake::Task["task_name"].invoke 

方法就可以了.在命令行中啟動rake today,可以得到:

D:/work >rake today (in D:/work) 發現挫男 老板,先烤九斤魚 我選中路 

2.默認任務:

可以為Rake增加一個默認任務,這樣可以簡單地用Rake命令來觸發這個默認任務,在上面的rakefile中,我們可以用如下方式把"today"任務作為默認任務.

task :default => [:today] 


然后調用直接在命令行中調用rake,可以得到跟調用rake today同樣的輸出結果.

這就是我們簡單的一個Rake任務定義,下面是完整的修改后的rakefile:

task :default => [:today]  desc "今天的任務" task :today do  Rake::Task["dan:bitchfish"].invoke  Rake::Task["dan:pc"].invoke end  namesoace :dan do  desc "任務1 -- 搭車去車車那里(這據說是個苦差,因為太遠了)"  task :busboy do   puts "發現挫男"  end   desc "任務2 -- 烤魚"  task :bitchfish do   puts "老板,先烤九斤魚"  end   desc "任務3 -- 網吧PC"  task :pc do   puts "我選中路"  end end 

通過以上兩個例子的介紹,估計rake任務是完全理解的,希望大家有任何問題都可以告訴武林技術頻道小編,我們將第一時間給你答復。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区回区在观看免费视频| 91精品久久久久久综合乱菊| 北条麻妃一区二区三区中文字幕| 亚洲精品欧美日韩专区| 国产精品人成电影在线观看| 色偷偷av亚洲男人的天堂| 欧美电影免费观看网站| 亚洲视频在线观看| 韩国视频理论视频久久| 81精品国产乱码久久久久久| 韩国美女主播一区| 亚洲福利在线播放| 国产成人精品在线观看| 日本久久久久久久久久久| 亚洲xxxx做受欧美| 国产精品欧美日韩久久| 国产精品久久久久久久美男| 92裸体在线视频网站| 日本精品免费一区二区三区| 亚洲精品在线不卡| 日韩有码在线播放| 91人成网站www| 国产精品永久免费视频| 久久久久99精品久久久久| 久久成人精品电影| 日韩免费av片在线观看| 日韩精品日韩在线观看| 欧美高清视频一区二区| 亚洲欧美精品在线| 国产欧美日韩专区发布| 久久av.com| 在线国产精品视频| 欧美一级片免费在线| 69视频在线免费观看| 亚洲女人天堂成人av在线| 2019国产精品自在线拍国产不卡| 亚洲人午夜色婷婷| 色爱av美腿丝袜综合粉嫩av| 国产深夜精品福利| 91社区国产高清| 成人国内精品久久久久一区| 日韩精品一区二区三区第95| 久久久视频免费观看| 国产97在线播放| 国产亚洲精品一区二区| 亚洲男人天天操| 午夜精品久久久久久99热| 亚洲人成电影网站色…| 国产精品欧美在线| 亚洲激情国产精品| 92国产精品视频| zzjj国产精品一区二区| 国产在线精品播放| 欧美成年人视频| 久久精品国产亚洲精品2020| 精品久久久久人成| 亚洲一区二区久久久| 97热精品视频官网| 日韩一区二区三区xxxx| 成人免费福利在线| 国产日本欧美一区| 亚洲毛片在线免费观看| 久久亚洲欧美日韩精品专区| 亚洲欧美精品中文字幕在线| 欧美第一淫aaasss性| 欧美国产日韩视频| 亚洲美女动态图120秒| 俺也去精品视频在线观看| 97婷婷大伊香蕉精品视频| 国产精品日日做人人爱| 91精品久久久久久久久久久久久久| 欧美精品电影在线| 热久久99这里有精品| 国产精品极品美女粉嫩高清在线| 成人免费网站在线看| 欧美综合一区第一页| 国产精品久久久久国产a级| 久久久精品免费视频| 亚洲精品aⅴ中文字幕乱码| 欧美激情视频一区二区三区不卡| 国产91露脸中文字幕在线| 中文字幕视频一区二区在线有码| 亚洲欧洲在线视频| 国产成人精品在线| 亚洲成人精品视频| 日韩欧美成人网| 成人网在线视频| 亚洲日韩欧美视频| 亚洲人永久免费| 成人黄色中文字幕| 日韩在线视频网站| 精品久久久久人成| 青草青草久热精品视频在线网站| 日韩av成人在线观看| 国产成人综合精品| 欧美理论电影网| 色播久久人人爽人人爽人人片视av| 亚洲香蕉av在线一区二区三区| 国语自产精品视频在线看抢先版图片| 中文字幕日韩av| 欧美专区国产专区| 亚洲免费伊人电影在线观看av| 成人免费看黄网站| 欧美最猛性xxxxx免费| 亚洲欧洲日本专区| 欧美华人在线视频| 国产精品一区二区av影院萌芽| 91中文字幕在线观看| 日韩免费在线电影| 亚洲xxx自由成熟| 国产免费亚洲高清| 欧美久久久精品| 91精品国产91久久久久久吃药| 91亚洲va在线va天堂va国| 久久国产精品久久精品| 久久久av免费| 狠狠做深爱婷婷久久综合一区| 国产精品久久久久一区二区| 亚洲性线免费观看视频成熟| 久久免费国产视频| 久久九九国产精品怡红院| 亚洲精品福利资源站| 国产精品91免费在线| 一个人看的www欧美| 亚洲精品98久久久久久中文字幕| 欧美亚州一区二区三区| 成人在线国产精品| 国产精品福利网| 97精品在线视频| 中文字幕日韩专区| 日韩av免费观影| 亚洲精品永久免费| 黑人精品xxx一区一二区| 亚洲免费影视第一页| 川上优av一区二区线观看| 国产婷婷97碰碰久久人人蜜臀| 国产成人综合精品| 91久久综合亚洲鲁鲁五月天| 国产精品久久久久久搜索| 精品中文字幕在线| 欧美福利视频在线| 91精品视频在线播放| 国产一区二区三区久久精品| 日日摸夜夜添一区| 色综合久久久久久中文网| 福利一区福利二区微拍刺激| 亚洲欧美日韩精品久久亚洲区| 国产欧美久久一区二区| 国产欧美va欧美va香蕉在| 久久久久久久久综合| 欧美激情高清视频| 欧美极品欧美精品欧美视频| 亚洲va电影大全| 国产91精品久久久久久| 国产噜噜噜噜噜久久久久久久久| 欧美日韩国产一区二区| 亚洲黄页网在线观看| 久久综合国产精品台湾中文娱乐网| 人九九综合九九宗合| 社区色欧美激情 | 欧美精品久久久久| 亚洲国产古装精品网站| 中文字幕av一区| 性色av香蕉一区二区|