早就想找个机会写写rake文件,但是接触到的项目都不怎么需要,所以一直也没有去学习一下。这两天一个项目需要把客户给的很多excel文件导入到数据库中(我用的好似MySQL),到网上找了一些工具,感觉都不好,因为客户的excel格式比较乱(特别是日期的格式,竟然是中文数字和阿拉伯数字都有的...),所以就想干脆仔细写一个算了。这是正好想到可以顺便学习一下rake,于是就动手啦。
网上关于rake的文章有不少。如果想快速上手,那么Rails Envy的
Ruby on Rails Rake Tutorial是绝佳的入门教程;如果想从更高的角度理解rake,那么当然要看Martin Fowler大大的
Using the Rake Build Language了。
好了,看完了入门教程,开始动手!先去看看rails项目根目录下的Rakefile这个文件,里面就是require了一大堆东西,没什么意思,有用的反而是文件开头的注释:
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
明白了吧,把rake文件写成.rake扩展名的,然后放到lib/tasks下面,rails就可以自动加载你的rake文件了。于是到lib/tasks下面创建我的文件data.rake:
require "lib/data_importer.rb"
namespace :eva do
desc 'Import init data from csv files.'
task :import_data => :environment do
DataImporter.import_teachers
end
end
以上代码非常容易理解,这也多亏了ruby强大的DSL能力。我就是创建了一个名为import_data的任务,然后在这个任务里面调用我自己写的DataImporter中的方法把excel中的数据导入到数据库中。
namespace用来为任务创建一个名字空间,这样我写的import_data任务就是eva:import_data,别人也可以在其它名字空间下创建相同名字的任务。rake db:migrate中的db就是这么个名字空间。
而:import_data => :environment这里声明了任务间的依赖关系,也就是import_data依赖于enviroment。那么enviroment是什么呢?执行一下rake --tasks查看所有的rake任务,没有叫这个名字的任务啊。怎么回事儿呢?其实你可以在RUBY_ROOT/lib/ruby/gems/1.8/gems/rails-<version>/lib/tasks下面找到一个rails自带的所有rake文件,打开其中的misc.rake,内容如下:
task :default => :test
task :environment do
require(File.join(RAILS_ROOT, 'config', 'environment'))
end
那么environment任务实际上是把当前rails项目的整个环境加载进来,这样就可以使用model啊、ActionSupport啊之类的东西了。
那么为什么这个任务在rake --tasks中没有显示呢?那是因为这个任务没有响应的描述(可以理解为注释)。看看misc.rake和我的rake文件的区别就能发现,我的rake文件在任务前面有一行desc语句,它用来描述任务是做什么的,只有加了描述的任务才会在rake --tasks产生的列表中出现。
有人可能会问,这不是很让人迷惑吗?可以显示这些任务,同时描述部分显示为空就好了啊。其实不然,从逻辑上看,不加desc的task应该是程序内部使用的,不应该被其它人使用,例如environment这个task,用来加载rails环境,如果显示在rake --tasks中,万一被别人滥用了,就不好了,所以最好不要显示,干脆让别人不知道有这个东东。这样一来,意在让别人使用的task可以加desc,不想让别人使用的task不加desc(可以加单纯的注释),岂不是两全其美?
分享到:
- 2007-09-23 17:10
- 浏览 4075
- 评论(7)
- 论坛回复 / 浏览 (7 / 8407)
- 查看更多
相关推荐
使用halcon进行测量,使用的是rake算子;使用halcon进行测量,使用的是rake算子;
rake详解
halcon提供给我们使用的测量矩形只能返回一个点,操作...rake工具封装了三个函数来完成,代码不少,下面我就来展示详细的代码和实际效果。 原文链接:https://blog.csdn.net/weixin_38566632/article/details/117744728
rake接收机仿真程序,包括多个仿真
针对异地通信网络的3G最佳接收机matlab程序。设计的三种RAKE接收机程序。非常实用。
RAKE接收技术是第三代CDMA移动通信系统中的一项重要技术。在CDMA移动通信系统中,由于信号带宽较宽,存在着复杂的多径无线电信号,通信受到多径衰落的影响。RAKE接收技术实际上是一种多径分集接收技术,可以在时间上...
rake for rails rake-0.8.7安装rails必须资源
rake-0.8.3.gem redmind安装必需
rake-0.8.7 for rails 安装rails必须的资源
rake for rails 安装rails资源
rake接收(多径分集技术)+matlab仿真程序
一篇介绍自适应Rake接受技术的硕士论文 希望对有相关研究的人有帮助
Rake接收机性能仿真(与非Rake接收机对比).pdfRake接收机性能仿真(与非Rake接收机对比).pdf
ofdm的一个实例,很简单但个人觉得蛮不错的,故推荐下
来自practical rails social networking sites上的第二章的实例,应用了数据导入,导入数据到mysql后就可以使用,命令: rake db:migrate(进入文件夹"railscoder")
RAKE-tutorial, 一种快速自动关键词提取的python 实现 RAKE快速自动关键字提取( 耙) 算法的python 实现,如下所述: ,S,Engel,D,,N,& Cowley,W 。 ( 2010 ) 从单个文档中自动提取关键字。 在M 。W 。& 。 ...
采用simulink仿真除直接序列扩频系统 的rake接收仿真,个人感觉很不错,和大家分享一下,
RAKE关键词提取python代码,python源码RAKE关键词提取python代码,python源码
基于Matlab的Rake接受机的仿真 发射端包括分集发射,接收端的最大比值合并、等增益合并以及选择式合并方式
rake接收机仿真matlab