国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 編程 > Ruby > 正文

Ruby中任務(wù)構(gòu)建工具rake的入門學(xué)習(xí)教程

2020-10-29 19:36:08
字體:
供稿:網(wǎng)友

Rake簡介

Rake的意思是Ruby Make,一個(gè)用ruby開發(fā)的代碼構(gòu)建工具.

但是,為什么Ruby需要Rake?

    按理說Ruby代碼無需編譯,應(yīng)該不需要Rake才對呀?原來,Rake另有妙用,即把Rake當(dāng)做一個(gè)任務(wù)管理工具來使用...這樣做有兩個(gè)好處:

1.以任務(wù)的方式創(chuàng)建和運(yùn)行腳本

   當(dāng)然,你可以用腳本來創(chuàng)建每一個(gè)你希望自動(dòng)運(yùn)行的任務(wù).但是,對于大型的應(yīng)用來說,你幾乎總是需要為數(shù)據(jù)庫遷移(比如Rails中db:migrate任務(wù))、清空緩存、或者代碼維護(hù)等等編寫腳本.對于每一項(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


通過rake ready_for_the_day來執(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!


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

命名空間

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

通過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)用方式很像呢?

默認(rèn)Task

有了上面那些設(shè)置,如果我們忘記或者不想寫詳細(xì)的任務(wù)名稱,直接執(zhí)行rake會(huì)有什么效果呢,結(jié)果是rake aborted!,任務(wù)被中斷的報(bào)錯(cuò)。既然有這樣的可能性,我們就需要消除這些隱患,通過設(shè)置default默認(rèn)任務(wù)就可以做到,如下:

 task :default => 'morning:turn_off_alarm'


當(dāng)你直接執(zhí)行rake命令時(shí),會(huì)執(zhí)行默認(rèn)操作,幫我們關(guān)閉鬧鐘。

描述你的Task

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

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


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

 rake morning:make_coffee    # Make coffee


調(diào)取Task

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

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


Rake腳本編寫

先來個(gè)簡單的例子,如下:

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

desc "任務(wù)1 -- 搭車去車車那里"#這據(jù)說是個(gè)苦差,因?yàn)樘h(yuǎn)了 task :busboy do puts "發(fā)現(xiàn)挫男" end  desc "任務(wù)2 -- 烤魚" task :bitchfish do puts "老板,先烤九斤魚" end  desc "任務(wù)3 -- 網(wǎng)吧PC" task :pc do puts "我選中路" end 

打開命令行工具,進(jìn)入這個(gè)文件所在目錄,然后運(yùn)行下面的命令,大致應(yīng)該類似如下結(jié)果:

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


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

分析:

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

D:/work>rake --tasks (in D:/work) rake bitchfish #任務(wù)2 -- 烤魚 rake busboy #任務(wù)1 -- 搭車去車車那里(這據(jù)說是個(gè)苦差,因?yàn)樘h(yuǎn)了) rake pc 任務(wù)3 -- 網(wǎng)吧PC 


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

puts "發(fā)現(xiàn)挫男" 


完全是一個(gè)普通的Ruby語句,puts是Ruby中進(jìn)行輸出的一般性方法,可以看出,Rake任務(wù)可以完全使用Ruby的能力,這使得它非常強(qiáng)大.

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

接下來加入依賴關(guān)系:

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

desc "任務(wù)1 -- 搭車去車車那里" task :busboy do puts "發(fā)現(xiàn)挫男" end  desc "任務(wù)2 -- 烤魚" task :bitchfish => :busboy do puts "老板,先烤九斤魚" end  desc "任務(wù)3 -- 網(wǎng)吧PC" task :pc do puts "我選中路" end 

再次運(yùn)行烤魚任務(wù),你會(huì)得到如下結(jié)果:

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

加入命名空間:

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

namespace :dan do desc "任務(wù)1 -- 搭車去車車那里" task :busboy do puts "發(fā)現(xiàn)挫男" end …… end 

再次運(yùn)行rake --tasks,你會(huì)得到如下的結(jié)果:

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


你現(xiàn)在需要使用rake dan:bitchfish才能啟動(dòng)烤魚這個(gè)任務(wù)了.
(BTW,你可以在你的rakefile中使用多個(gè)命名空間,對任務(wù)進(jìn)行分類.)

了解了上面兩個(gè)知識(shí)點(diǎn)后,我們來了解下兩個(gè)具體實(shí)例:

1.在一個(gè)任務(wù)中調(diào)用另外一個(gè)任務(wù)

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

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

可以看出,調(diào)用其它任務(wù)的方式很簡單,只需要調(diào)用

Rake::Task["task_name"].invoke 

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

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

2.默認(rèn)任務(wù):

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

task :default => [:today] 


然后調(diào)用直接在命令行中調(diào)用rake,可以得到跟調(diào)用rake today同樣的輸出結(jié)果.

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

task :default => [:today]  desc "今天的任務(wù)" task :today do  Rake::Task["dan:bitchfish"].invoke  Rake::Task["dan:pc"].invoke end  namesoace :dan do  desc "任務(wù)1 -- 搭車去車車那里(這據(jù)說是個(gè)苦差,因?yàn)樘h(yuǎn)了)"  task :busboy do   puts "發(fā)現(xiàn)挫男"  end   desc "任務(wù)2 -- 烤魚"  task :bitchfish do   puts "老板,先烤九斤魚"  end   desc "任務(wù)3 -- 網(wǎng)吧PC"  task :pc do   puts "我選中路"  end end 

看完上面兩個(gè)例子,估計(jì)rake任務(wù)就算全部了解了...其它都是些代碼槍花罷了..多耍便是..

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
尤物网址在线观看| 国产人成精品| 一级黄色av| 亚洲日本久久久午夜精品| 99在线免费观看| 亚洲91av| 激情亚洲综合网| 中文字幕国产视频| 91中文字幕| 青青青青在线| 国产美女自拍视频| 国产精品久久久久久久久鸭| 国产高潮又爽又无遮挡又免费| 国产麻豆麻豆| 91视频黄色| 高清色视频在线观看| 国产高清视频在线| 欧美日韩**字幕一区| 国产一二在线观看| 在线国产三级| 国产一二三视频| 亚洲社区在线| 国产高清自拍视频在线观看| 欧美日韩国产亚洲沙发| 国产精品福利视频一区二区三区| av中文天堂在线| 国产黄色高清在线| eeuss影影院www在线播放| 黄色av网站在线免费观看| 97人人在线| 国产成人综合亚洲欧美在| 丁香花在线电影小说观看| 97最新国自产拍视频在线完整在线看| 可以免费看污视频的网站 | 国产一级在线观看| baoyu777.永久免费视频| 国产精品爱久久久久久久小说 | **三级三级97片毛片| 日本调教视频在线观看| 精品国产免费观看一区| 中文字幕麻豆| 中文字幕专区| 国产麻豆综合视频在线观看| 欧美性猛交p30| 青青青手机在线视频观看| jlzzjlzz欧美大全| www.超级碰| 好看的中文字幕在线播放| 国产乱在线观看视频| 国产中文字幕网| 天堂资源在线中文| 国产香蕉免费精品视频| 国产小视频在线观看| 国产在线播放av| 国产精品伦理一区二区三区 | 中文字幕在线影视资源| 中文字幕在线永久在线视频| 99视频资源网| 国产黄色片在线播放| 精品欧美日韩一区二区| 99热国产在线| 日本h片在线观看| 久热中文字幕精品视频在线| 九九99精品| 国产三区视频在线观看| 91亚洲天堂| www.jizz在线观看| 最新中文字幕av专区| 国产极品一区二区三区| 先锋av资源网| 国产精品视频福利一区二区| baoyu777.永久免费视频| 麻豆福利在线观看| 国产精品yjizz视频网一二区| 永久免费网站在线| 热99re久久精品这里都是免费| 九九在线免费视频| 中文字幕视频在线| 99re热在线观看| 中文字幕在线资源| h网站久久久| 国产porny蝌蚪视频| 久久久久久久久亚洲精品| 国产成+人+亚洲+欧美+综合| 二区三区中文字幕| 日本在线观看| 伊人伊人av电影| 国产精品视频一区二区久久 | 精品久久亚洲一级α| 亚洲an天堂an在线观看| 国产精品入口麻豆电影| 国产尤物一区二区三区| 亚洲免费国产| 在线免费观看高清视频色| 国产三级在线观看| 中文字幕在线免费| 大香伊人中文字幕精品| 激情综合网五月激情| jlzzjlzz欧美大全| 四虎成人精品在永久在线观看| 国产超碰97| 在线一区二区三区精品| 影音先锋在线中文字幕| av黄色在线观看| 国产高清在线视频| 2021av天天| 国产91足控脚交在线观看| 国产激情视频一区二区| 国产精品被窝福利一区| 69堂视频在线观看国产| 中文在线官网天堂| 伊人网站在线| 四虎精品成人a在线观看| 羞羞视频在线观看免费| 免费观看一二区视频网站| 精品孕妇一区二区三区| 高清av在线| 国产区在线观看| 香蕉视频网站在线观看| 免费av在线| 国产黄色大片在线观看| 天天干天天摸| 国产香蕉视频在线看| 精品乱码一区二区三四区视频| 日本欧洲一区| 国产婷婷视频在线| av在线播放网| 国产视频福利| 男女午夜视频在线观看| 国产精品视频二区三区| 亚洲国产日韩在线人成电影| 九九热视频在线| 亚洲欧美国产另类首页| 国产一级视频| 日本福利在线| 2020国产在线视频| 国产男女av| 日本动漫同人动漫在线观看| 国产对白国语对白| 国产永久免费高清在线观看| 尤物视频在线观看视频| 好吊日视频在线观看| 亚洲欧美日韩成人网| 午夜国产福利在线| 男女午夜视频在线观看| 国产馆av播放| 最近免费中文字幕大全免费第三页| 99爱视频在线观看| 国产精品666| 国产精品一区二区婷婷| 快射av在线播放一区| 在线国产三级| 精品视频一二三| 精品一区二区三区高清免费不卡| 午夜视频在线| 国产一级性片| 国产亚洲依依| 国产人成精品| 国产激情小视频在线| 最新国产在线精品91尤物| 国产在线视频精品视频免费看| 欧美日韩**字幕一区| 欧美日韩在线资源| 国产中文伊人| 国产免费黄色| 国产人成在线观看| ·天天天天操| www.色五月| 五月婷婷开心综合| 国产黄色高清在线| 在线视频观看亚洲| wwww在线观看| 五月亚洲综合| 国产二区三区四区| 在线视频中文字幕第一页| av网站在线播放| 九九热免费在线视频| 国产野外战在线播放| 91视频久色| 四虎成人免费观看在线网址| 日本电影全部在线观看网站视频| 久久av少妇| 精品美女在线观看视频在线观看| 影音先锋日韩| 国产精品一卡二卡三卡| 一本久久精品| 99视频资源网| 亚洲午夜久久久久中文字幕| 豆国产97在线|亚洲| 91在线超碰| 国产精品天堂| 在线视频99| 国产三级视频在线播放线观看| h网站久久久| 国产写真视频在线观看| 免费不卡中文字幕视频| 精品欧美日韩一区二区| 国产精品一二三区视频| 免费看av大片| 日本三级视频网站|