转 Rake简介 gitlab 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脚本编写

先来个简单的例子,如下:

假设你是一个火星成员,老版本那些,即如燕儿虎跑之类的,在周末你打算去车车那边打火锅,然后集体PC去.对应这个情况,你需要为自己制定三个任务:搭车找车车、烤鱼和网吧PC.用vim创建创建一个名叫rakefile的文件(备注:Rake会在当前路径下寻找名叫Rakefile、rakefile、RakeFile.rb和rakefile.rb的rake文件),并键入如下代码:

Ruby代码
  1. desc"任务1--搭车去车车那里"#这据说是个苦差,因为太远了
  2. task:busboydo
  3. puts"发现挫男"
  4. end
  5. desc"任务2--烤鱼"
  6. task:bitchfishdo
  7. puts"老板,先烤九斤鱼"
  8. end
  9. desc"任务3--网吧PC"
  10. task:pcdo
  11. puts"我选中路"
  12. end



打开命令行工具,进入这个文件所在目录,然后运行下面的命令,大致应该类似如下结果:

Ruby代码
  1. D:work>rakebusboy
  2. (inD:/work)
  3. 发现挫男
  4. D:work>rakebitchfish
  5. (inD:/work)
  6. 老板,先烤九斤鱼
  7. D:workruby_worksruby_book>rakelaundry
  8. (inD:/work)
  9. 我选中路


(备注:文字部分是没啥逻辑的,纯粹娱乐下...)

分析

相信看完上面那段东东,你已经知道怎么搞了...现在介绍些基础知识,方便加深理解.从上面的代码可以知道,此文件一共定义了3个任务,desc是Rake定义的方法,表示对下面定义任务的描述.这个描述会在使用Rake --tasks(或者Rake-T)命令时输出在屏幕上.

Ruby代码
  1. D:work>rake--tasks
  2. (inD:/work)
  3. rakebitchfish#任务2--烤鱼
  4. rakebusboy#任务1--搭车去车车那里(这据说是个苦差,因为太远了)
  5. rakepc任务3--网吧PC


task是Rake最重要的方法.它的方法定义是:task(args,&block).任务体是一个block,本例中只是简单输出你所要做的工作.需要注意的是代码
【转】Rake简介 gitlab rake

Ruby代码
  1. puts"发现挫男"


完全是一个普通的Ruby语句,puts是Ruby中进行输出的一般性方法,可以看出,Rake任务可以完全使用Ruby的能力,这使得它非常强大.

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

接下来介绍下:依赖关系和命名空间

加入依赖关系

很显然,在我们定义的任务中,"烤鱼"是依赖于"搭车去车车那里"的(其它地方有没烤鱼吃不知道,反正地点就定在那了).那么,我们需要在我们的任务定义中加入这个依赖关系,修改后的文件如下:

Ruby代码
  1. desc"任务1--搭车去车车那里"
  2. task:busboydo
  3. puts"发现挫男"
  4. end
  5. desc"任务2--烤鱼"
  6. task:bitchfish=>:busboydo
  7. puts"老板,先烤九斤鱼"
  8. end
  9. desc"任务3--网吧PC"
  10. task:pcdo
  11. puts"我选中路"
  12. end



再次运行烤鱼任务,你会得到如下结果:
Ruby代码
  1. D:work>rakebitchfish
  2. (inD:/work)
  3. 发现挫男
  4. 老板,先烤九斤鱼


命名空间

跟任何编程语言类似,当你的rake文件很多时,当你有很多任务的时候,你需要关注它们的命名冲突问题,命名空间(namespace)就是一个自然的解决方案.你可以为上面的三个任务定义一个叫做dan的命名空间.

Ruby代码
  1. namespace:dando
  2. desc"任务1--搭车去车车那里"
  3. task:busboydo
  4. puts"发现挫男"
  5. end
  6. ……
  7. end



再次运行rake --tasks,你会得到如下的结果:

Ruby代码
  1. D:work>rake--tasks
  2. (inD:/work)
  3. rakedan:bitchfish#任务2--烤鱼
  4. rakedan:pc#任务3--网吧PC
  5. rakedan:busboy#任务1--搭车去车车那里


你现在需要使用rake dan:bitchfish才能启动烤鱼这个任务了.
(BTW,你可以在你的rakefile中使用多个命名空间,对任务进行分类.)

了解了上面两个知识点后,我们来了解下两个具体实例:

在一个任务中调用另外一个任务

当任务众多的时候,你很可能需要在一个任务中调用另外一个任务,假设我们把今天所有要做的工作定义为一个任务:today.在这个任务中,有两个任务需要被调用,一个是烤鱼,一个是网吧PC.当然,由于烤鱼依赖于搭车去车车那里,我们还是需要搭车去车车那里的.在文件的顶部定义一个today的任务:

Ruby代码
  1. desc"今天的任务"
  2. task:todaydo
  3. Rake::Task["dan:bitchfish"].invoke
  4. Rake::Task["dan:pc"].invoke
  5. end
  6. namespace:dando
  7. ……
  8. end



可以看出,调用其它任务的方式很简单,只需要调用Ruby代码
  1. Rake::Task["task_name"].invoke

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

Ruby代码
  1. D:work>raketoday
  2. (inD:/work)
  3. 发现挫男
  4. 老板,先烤九斤鱼
  5. 我选中路


默认任务

可以为Rake增加一个默认任务,这样可以简单地用Rake命令来触发这个默认任务,在上面的rakefile中,我们可以用如下方式把"today"任务作为默认任务.

Ruby代码
  1. task:default=>[:today]


然后调用直接在命令行中调用rake,可以得到跟调用rake today同样的输出结果.

这就是我们简单的一个Rake任务定义,下面是完整的修改后的rakefile:

Ruby代码
  1. task:default=>[:today]
  2. desc"今天的任务"
  3. task:todaydo
  4. Rake::Task["dan:bitchfish"].invoke
  5. Rake::Task["dan:pc"].invoke
  6. end
  7. namesoace:dando
  8. desc"任务1--搭车去车车那里(这据说是个苦差,因为太远了)"
  9. task:busboydo
  10. puts"发现挫男"
  11. end
  12. desc"任务2--烤鱼"
  13. task:bitchfishdo
  14. puts"老板,先烤九斤鱼"
  15. end
  16. desc"任务3--网吧PC"
  17. task:pcdo
  18. puts"我选中路"
  19. end
  20. end


看完上面两个例子,估计rake任务就算全部了解了...其它都是些代码枪花罢了..多耍便是..

来看看我们的Rails源码吧...

Rails中的Rake任务

Rails预定义了大量的Rake任务,在Rails应用的开发过程中,你想必已经在大量使用它们了.在Rails中,所有的Rake任务都放在rails目录的lib/tasks目录下(在作者的环境下是C:Rubylibrubygems1.8gemsrails-2.3.5libtasks),所有的rake任务都以.rake作为后缀名,这些以.rake结尾的文件会被自动加载到你的环境中.你可以到一个已有的Rails工程根目录下键入rake --tasks,可以看到很多的rake任务已经为你整装待发了.

  

爱华网本文地址 » http://www.aihuau.com/a/25101014/216737.html

更多阅读

怎么转呼啦圈 精 软性呼啦圈怎么转

怎么转呼啦圈 精——简介呼啦圈大家都很喜欢的运动。不但很有意思,还可以帮助身体脂肪运动起来。那么怎么转呼啦圈呢?下面的方法希望能够帮到大家。怎么转呼啦圈 精——方法/步骤怎么转呼啦圈 精 1、呼啦圈呼啦圈是分不同重量型

玩转小米:2 破解小米收费主题等的最新方法

玩转小米:[2]破解小米收费主题等的最新方法——简介 小米官方主题授权已改变机制,笔者之前发布的破解方法已经失效。但,上有政策,下有对策,不要低估我们米粉的力量!现已有最新的破解方法,亲测可行! 本经验就介绍一下:破解小米商店收费主题等

如何将支付宝的钱转到余额宝 怎么将余额转到余额宝

如何将支付宝的钱转到余额宝——简介有一百多块在支付宝里待着,闲着也闲着转到余额宝里吧!这样每天还会多那么一点点,多好!下面介绍如何将支付宝的钱转到余额宝如何将支付宝的钱转到余额宝——方法/步骤

谷氨酰转肽酶偏高的原因 谷丙转氨酶偏高的原因

谷氨酰转肽酶偏高的原因——简介谷氨酰转肽酶偏高的原因是什么?谷氨酰转肽酶是人体中广泛存在的一种酶,主要分布在肾内,胰和肝也较多,谷氨酰转肽酶偏高或者偏低可能表示此类器官出现病变,需要及时检查治疗,那么造成谷氨酰转肽酶偏高的原因

umd转txt/txt转umd umd转换txt

umd转txt/txt转umd——简介 经常看到很多80、90后整天拿个手机看网络小说。同样本人也很喜欢看网络小说,书龄有两年多,整理一些实用的工作与大家分享的, 如本节说的是电子书格式转换器-umd转txt/txt转umd工具:umd转txt/txt转umd——工

声明:《转 Rake简介 gitlab rake》为网友壮哉我硕爷分享!如侵犯到您的合法权益请联系我们删除