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

摘要:
最好你可以写自己的Rake。1977年,贝尔实验室的StuartFeldman创造了“make”。事实上,ruby用户在rake出现前也在使用它。呵呵三、Rake如何工作开始我想给这个部分起名为"HowtogetwastedwithRake"。"end这样我可以在这个Rakefile的目录,分别运行这些任务:$rakepurchaseAlcoholPurchasedVodka$rakemixDrinkMixedFuzzyNavel$rakegetSmashedDood,everthing'sblurry,canIhalffnoth'rdrinnnk?

下面是我们使用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年,贝尔实验室的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 为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的目录,分别运行这些任务:

$ rake purchaseAlcohol
Purchased Vodka
$ rake mixDrink
Mixed Fuzzy Navel
$ rake getSmashed
Dood, everthing's blurry, can I halff noth'r drinnnk? 酷!但是从顺序上看,我可以用任何的顺序运行这个任务。比如喝醉在买酒或者喝酒之前。当然这不符合人的习惯。
四、Rake的顺序

task :purchaseAlcohol do
puts "Purchased Vodka"
end

task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end

task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end 这样,如果想喝酒,就得先去买,如果想喝醉,就得先喝酒。

$ rake purchaseAlcohol
Purchased Vodka
$ rake mixDrink
Purchased Vodka
Mixed Fuzzy Navel
$ rake getSmashed
Purchased Vodka
Mixed Fuzzy Navel
Dood, everthing's blurry, can I halff noth'r drinnnk? 看到了吧,我喝醉和,因为酒已经买了,也被我喝了。(译者:我是喜欢百事的,所以倘若我写,定然拿百事当例子。但是我让我儿子和可口,为什么呢?下面告诉你。)
现在,你的欲望无法满足了,你想让你的朋友加入进来。就像一个团队的开发,如果你想加入一个新人,你得有合适的规划。你得有文档。那么问题来了。
Ruby on Rails中的Rake教程(Rake如何把我灌醉!)第1张
五、如何给我的Rake添加文档
Rake添加文档非常的方便,使用“desc”就可以了:
desc "This task will purchase your Vodka"
task :purchaseAlcohol do
puts "Purchased Vodka"
end

desc "This task will mix a good cocktail"
task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end

desc "This task will drink one too many"
task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end 看到了吧,我的每个任务都添加了desc,这样我们可以输入"rake -T"或者"rake --tasks":

$rake --tasks
rake getSmashed # This task will drink one too many
rake mixDrink # This task will mix a good cocktail
rake purchaseAlcohol # This task will purchase your Vodka 简单乎?呵呵
六、Rake的命名空间
当你开始酗酒,并且开始使用大量的rake任务的时候,你需要一个好方法将他们分类,这时用到了命名空间,如果我在上面的例子使用了命名空间,那么:
namespace :alcoholic do
desc "This task will purchase your Vodka"
task :purchaseAlcohol do
puts "Purchased Vodka"
end

desc "This task will mix a good cocktail"
task :mixDrink => :purchaseAlcohol do
puts "Mixed Fuzzy Navel"
end

desc "This task will drink one too many"
task :getSmashed => :mixDrink do
puts "Dood, everthing's blurry, can I halff noth'r drinnnk?"
end
end 命名空间允许你将一些任务放到特定的分类中,在一个Rakefile中,你可以加入几个命名空间。运行rake --tasks
rake alcoholic:getSmashed # This task will drink one too many
rake alcoholic:mixDrink # This task will mix a good cocktail
rake alcoholic:purchaseAlcohol # This task will purchase your Vodka
所以如果想运行这个任务,只要输入 rake alcoholic:getSmashed:
七、如何写一个有用的ruby任务
最近,我想用ruby创建几个文件夹:
desc "Create blank directories if they don't already exist"
task(:create_directories) do

# The folders I need to create
shared_folders = ["icons","images","groups"]

for folder in shared_folders

# Check to see if it exists
if File.exists?(folder)
puts "#{folder} exists"
else
puts "#{folder} doesn't exist so we're creating"
Dir.mkdir "#{folder}"
end

end
end
当然,还可以在rake中使用更多的 文件工具File Utils,或者加入其他的部分。
八、如何为我的rails应用写一个Rake任务
一个rails应用中,已经有了一些rake任务,你可以在你的项目目录里运行:rake --tasks。
为了给你的rails应用添加一个新的任务,你可以打开/lib/tasks目录(已经存在的),添加一个叫
something.rake的文件,这个任务会被自动的检索到,这些任务会被添加到rake tasks列表中,你可以在根目录里运行他们,现在把我们上面的例子放到这个rails应用中。

免责声明:文章转载自《Ruby on Rails中的Rake教程(Rake如何把我灌醉!)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【IIS】设置URL重定向为什么 Oracle 应该主推 NetBeans下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ORBSLAM2 初体验 —— 配置安装

转载请注明出处,谢谢原创作者:MingruiYU原创链接:https://www.cnblogs.com/MingruiYu/p/12286752.html ORB-SLAM2作为目前应用最广泛的视觉SLAM系统,其经典和重要程度毋庸置疑。ORB-SLAM2的github文档中,提供了详尽的ORB-SLAM2配置教程,上手应该是比较容易的。本文将跟随其g...

工作问题解决

1.init  测试设计 选项 -e  telinit   -e init 测试选项 man 手册 正式。 2. 8.2 Linux源代码的目录结构8.2.1 Linux目录结构Linux的源代码全部在一个目录下,这里有很多文件夹,包含不同功能的源代码:├—init 内核初始化代码 ├—kernel 内核核心部分:进程,定时,程序执行,信号,模块... ├...

ubuntu 14.04 源码编译mysql-5.7.17

环境为 Ubuntu 12.04 64 位的桌面版 编译的mysql 版本为 5.7.18 首先需要安装一下依赖包 sudo apt-get install libncurses5-dev cmake chkconfig 创建用户组和用户 mysql groupadd mysql useradd -r -g mysql -s /bin/bash mysq...

编译安装squid3.1亲测

编译安装Squid2.6 1,设置“文件描述符”,并设置用户同时打开文件数量 # vi /usr/include/bits/typesizes.h # vi /usr/include/linux/posix_types.h 把里边的 #define __FD_SETSIZE 1024 改成 65536 2,设置当前环境 # ulimit -Hs 65536...

使用 linux kernel +busybox 定制linux系统

目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序: grub-> bzimage > initrd > init > chroot sbin/init (从内存镜像转换成rootfs...

预编译头文件

一、预编译头文件使用经验: 如果预编译头文件被正确使用时,它确实大大提高我们编程的效率(你工作中,有多少时间是在等编译完成?很多吧,这个时候一般都很无聊,无奈,浪费时间)。但是他太容易用错了. 下面是几种常见的错误用法. 1) 在预编译头文件里include自己的头文件(当然, 如果你的头文件不经常变化, 也可以) 原因:自己的头文件一般会经常变, 便利后...