Ruby on Rails中的Rake教程(Rake如何把我灌醉!)

原文:Ruby on Rails Rake Tutorial (aka. How rake turned me into an alcoholic)
引言:作为一个rails的开发者,你可能很熟悉使用rake进行你的测试,或者使用rake db:migrate运行你的migrations,但是你真的知道Rake的背后故事吗?你意识到可以自己写一个Rake任务或者一个有用的 lib吗

下面是我们使用Rake任务的例子:

1、给列表中的用户发送邮件
2、每晚数据的计算和报告
3、过期或重新生成缓存
4、备份数据和svn版本(how's this : subversion repository )
5、运行数据处理脚本(sort of,how much is called this )
6、Pouring drinks to get a good buzz on(一句玩笑,是这两位仁兄的风格)

这篇文章中,我们将讨论为什么要创建Rake,和他怎么样帮助我们的rails应用。最好你可以写自己的Rake。

一、历史回顾:make

为了了解Rake的来历,我们先了解一下Rake的爷爷:Make。
让我们回到那个代码块需要编译,解释性语言和iphone还没出现在地球上的时代。


回到那时,我们下载的大型程序,还是一堆源代码和一个shell脚本。这个shell脚本包含了所有需要用来compile/link/build的代 码。你需要运行“install_me.sh”这个脚本,每一行代码将被运行(编译每一行源文件),然后生成一个你能够运行的文件。

对于大多数人这样是不错的,但是对于程序开发人员却是一个不幸。每次你对源代码进行一个小的改动,并进行测试的时候,你需要回到shell脚本,并重新编 译所有的源代码,显然对于大的程序“那是相当的”耗时的。

1977年(作者出生那年,我78年),贝尔实验室的Stuart Feldman创造了“make”。解决了编译时间过长的问题。Make用来编译程序,取得两方面的进步:

Stuart Feldman

(1)Make可以发现哪个文件在上一次编译后改动过,根据这点,再次运行Make时,仅编译改动过的文件。这个很大程序上减少了重新编译大型程序的时 间。

(2)Make可以进行从属跟踪。你可以告诉编译器,源文件A的编译需要源文件B,源文件B的编译需要源文件C,所以Make在编译A时发现B没有编译, 将会先编译B。

可以这样定义:Make是一个可执行程序。像ls或dir一样。让Make理解如何让编译一个项目,需要创建一个makefile文件,描述所有的源文件 和依赖关系。makefiles有自己的语法,你不用去了解。

这些年Make出现了其他的变体,并且被其他的语言使用。事实上,ruby用户在rake出现前也在使用它。

“但是,ruby并不需要编译,我们用它来干嘛?”

是啊。ruby是一个解释性语言,我们不需要编译它的源代码,所以ruby程序员为什么使用它呢?

两个重要的原因:

(1)创建任务
在大型的应用中,你经常编写脚本,在命令行下运行一些任务。比如清除缓存,维护任务,或者迁移数据库。你可以写一个MakeFile来组织你的任务,而不 是写十个不相干的脚本(或者一个复杂的)。这样你可以简单的运行:“make stupid”。

(2)从属任务跟踪
当你开始写一些维护任务的时候,可能发现有些任务的使用可能有重复。比如,“migrate”任务和“schema:dump”都需要链接数据库,这样我 可以创建一个任务"connect_to_database",使“migrate”和“schema:dump”都依赖 于"connect_to_database",这样下次运行“migrate”时,"connect_to_database"会先于 “migrate”运行

二、如何得到Rake

几年前,Jim Weirich 在一个 java项目上使用了Make,他发现如果在他的Makefile中写一小段ruby代码 将会带来非常大的方便。所以 他创建了Rake。



左:Jim Weirich,中:Jason Seifer,右:Gregg Pollack
(后面两位为本文作者)



Jim 为Rake创建了任务功能,附属关系跟踪,甚至创建了时间段判断(timestamp recognition),(在上一次编译的基础上仅编译改动的部分),当然,对于ruby,我们并不需要编译。

我很想知道Jim在代码里做了什么,你也想知道吧。Jim可能从来没想给这个代码写个文档,可能现在他也是被烦透了,写了一个 。呵 呵


三、Rake如何工作

开始我想给这个部分起名为"How to get wasted with Rake"。

那么我想喝点酒,该怎么做呢?

1、去买酒
2、喝酒
3、喝醉




如果我要使用Rake完成这个任务,我会创建一个“Rakefile”文件:

task :purchaseAlcohol
 do

puts " Purchased Vodka "
end

task :mixDrink do
puts " Mixed Fuzzy Navel "
end

task :getSmashed do
puts " Dood, everthing's blurry, can I halff noth'r drinnnk? "
end

这样我可以在这个Rakefile的目录,分别运行这些任务:


                
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值