zoukankan      html  css  js  c++  java
  • rake task套rake task

    http://www.javaeye.com/topic/719362

       发表时间:2010-07-23   最后修改:2010-07-23
    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 :busboy do  
    3. puts "发现挫男"  
    4. end  
    5.   
    6. desc "任务2 -- 烤鱼"  
    7. task :bitchfish do  
    8. puts "老板,先烤九斤鱼"  
    9. end  
    10.   
    11. desc "任务3 -- 网吧PC"  
    12. task :pc do  
    13. puts "我选中路"  
    14. end  



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

    Ruby代码  收藏代码
    1. D:\work>rake busboy  
    2. (in D:/work)  
    3. 发现挫男  
    4.   
    5. D:\work>rake bitchfish  
    6. (in D:/work)  
    7. 老板,先烤九斤鱼  
    8.   
    9. D:\work\ruby_works\ruby_book>rake laundry  
    10. (in D:/work)  
    11. 我选中路  


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

    分析

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

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


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

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


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

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

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

    加入依赖关系

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

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



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


    命名空间

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

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



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

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


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

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

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

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

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



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

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

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


    默认任务

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

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


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

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

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


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

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

    Rails中的Rake任务

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

    (对于上面文件夹里的*.rake任务经过上面的解析,相信要看懂应该不难了...自己看着办吧.)

    参考文章:

    Ruby中的Rake任务详述
    http://hi.baidu.com/kenrome/blog/item/8caf71f0f6ffc7c07831aac9.html

       发表时间:2010-07-23   最后修改:2010-07-29
    现在都学堂桑了。
    你写的,我之前在哪里看过,简直一模一样。
    后来发现你下面的链接。。
    0 请登录后投票

       发表时间:2010-07-29  
    浅显易懂,学rake就从你这篇文章开始了.
    0 请登录后投票

       发表时间:2010-07-29  
    wyb222 写道
    飞人……你给个稿费不

    車車,等我去北京就請你們吃烤魚
    0 请登录后投票

       发表时间:2010-08-03  
    哥很好奇,为什么你的代码里面不用繁体字
    0 请登录后投票

       发表时间:2010-08-03  
    select*from爱 写道
    哥很好奇,为什么你的代码里面不用繁体字

    因為這是在家里寫的
    0 请登录后投票

       发表时间:2010-08-03  
    老板 烤九斤鱼多少钱?
    0 请登录后投票

       发表时间:2010-08-09  
    讲的很清楚,学习了~~~
    0 请登录后投票

       发表时间:2011-01-20  
    开始学习写rake了,model中代码太冗余了
    0 请登录后投票

       发表时间:2011-03-03  
    MySpace 写道
    老板 烤九斤鱼多少钱?

    ?什么意思啊
    0 请登录后投票





  • 相关阅读:
    【笔记】Excel技巧—004 多用途的文档属性
    【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)—ch07I
    【笔记】Excel技巧—003 实用的Excel选项设置
    【笔记】Excel技巧—005 使用工作区文件
    【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)—ch07II
    【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)ch05
    【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)ch12
    【笔记】DE2 硬件和处理器范例2 External SRAM interface (DE2)(digital logic)(verilog hdl)
    【笔记】Excel技巧—006 选取单元格区域
    【原创】The solutional manual of the Verilog HDL: A Guide to Digital Design and Synthesis (2nd)ch06
  • 原文地址:https://www.cnblogs.com/lexus/p/1984807.html
Copyright © 2011-2022 走看看