浏览 8462 次
锁定老帖子 主题:我的第一关rake文件
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-09-23
网上关于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(可以加单纯的注释),岂不是两全其美? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-12-23
不错
但是没有详细介绍怎么把excel导入mysql。 麻烦,能不能,详细的写一下。 |
|
返回顶楼 | |
发表时间:2007-12-23
rake是建表结构的....不是用来导数据的
不如用excel生能csv 用工具再导方便些. http://hi.baidu.com/%D0%C7203/blog/item/ebda2dd09f1d698ea1ec9c7a.html 我看的是中文的... |
|
返回顶楼 | |
发表时间:2007-12-23
每次当我想操起ruby写rake file的时候,都发现我三行两行shell脚本就搞定了,所以时至今日,还未能开始我的第一个rake文件。
|
|
返回顶楼 | |
发表时间:2007-12-23
我也经常需要处理excel数据,所以也很想看楼主如何处理数据导入的。
我自己用的是笨办法,用OpenOffice将excel另存csv,然后用FasterCSV来parse数据,生成ar对象,save到数据库,也是一个shell脚本搞定,每次excel/csv的首行只要变化,跟着的shell脚本也需要一起维护。 |
|
返回顶楼 | |
发表时间:2008-03-25
不知大家有没有这种需求,用户的日常操作中,原始数据可能是其他人员发给他的excel文件,用户需要把excel稍微处理一下,然后导入到系统中,他才不想一个个敲呢。
如果你希望他一个个敲,那么他肯定会造反,“sap直接从excel复制到系统中就可以了,你们的系统增加了我的工作量,我不干”。 那么针对这种日常大批量数据维护更新,大家是怎么处理的呢?期盼佳音 |
|
返回顶楼 | |
发表时间:2008-03-26
抛出异常的爱 写道 rake是建表结构的....不是用来导数据的
不如用excel生能csv 用工具再导方便些. http://hi.baidu.com/%D0%C7203/blog/item/ebda2dd09f1d698ea1ec9c7a.html 我看的是中文的... 您真是万千程序员的杀手 |
|
返回顶楼 | |
发表时间:2008-03-28
robbin 写道 每次当我想操起ruby写rake file的时候,都发现我三行两行shell脚本就搞定了,所以时至今日,还未能开始我的第一个rake文件。
同感,我至今写过的所有Rakefile文件里面也就用了task,其余的统统没用上...我觉得,如果Rake能够提供一些插件机制,在不同领域通过插件再发展Rake DSL可能会更好... |
|
返回顶楼 | |