不一样的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文件),并键入以下代码: