早就想找个机会写写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
- 浏览 4131
- 评论(7)
- 论坛回复 / 浏览 (7 / 8465)
- 查看更多
相关推荐
集成DKNightVersion时,可能需要使用rake这样的构建工具来自动化文件的添加和配置。 在iOS开发中,了解SDK、框架和第三方库的使用至关重要。例如,iOS SDK提供了各种系统服务和API,NIB文件用于创建用户界面,而...
在iOS或macOS开发中,良好的文件组织至关重要,因为它有助于代码的可读性和维护性。SwiftSketch提供的文件夹结构通常会包括以下几个关键部分: 1. `Sources`:存放应用程序的主要源代码,如Swift文件。 2. `...
【标题】"FirstRubyProject:这是我的第一个 Ruby 项目" 这个标题表明了这是一个关于 Ruby 编程语言的初学者项目,作者通过它初次接触并实践了 Ruby 的编程知识。Ruby 是一种面向对象的、动态类型的编程语言,以其...
正确配置备份路径是备份流程的第一步。 1. **配置备份目录路径** - 执行命令`vim /etc/gitlab/gitlab.rb`进入配置文件编辑模式。 - 设置`gitlab_rails['manage_backup_path'] = true`以启用对备份路径的管理。 -...
在 Ruby 中,插件通常是一个自包含的代码模块,它可以是一个 gem(Ruby 的包管理器),也可以是单独的脚本文件。安装 Ruby 插件最常见的方式就是通过 `gem` 命令行工具。例如,如果你想要安装一个名为 `rails`(Ruby...
- **Database Migration**:数据库结构的变化会通过迁移文件来实现,运行`rake db:migrate`进行更新。 - ** erb**:ERB(Embedded Ruby)是Rails中的视图模板语言,允许在HTML中嵌入Ruby代码。 - **Helper**:辅助...
在Ruby世界里,**Ruby on Rails**(简称Rails)作为最受欢迎的Web开发框架之一,对于任何希望深入理解和掌握Rails开发的人来说,熟悉其应用程序的基本目录结构至关重要。本文将详细介绍一个典型的Rails应用程序各个...
Ruby Installer 1.9.3 包含了Ruby解释器、标准库以及必要的工具,如RubyGems,它是Ruby的包管理器,允许用户方便地安装和管理第三方库。RubyGems通过gem文件来分发和安装这些库,极大地丰富了Ruby的功能和生态系统。...
除此之外,Ruby还有许多实用的工具,如Rake(任务自动化工具)、RSpec(行为驱动开发的测试框架)和Rubocop(代码风格检查工具)等,它们能提升开发效率并保证代码质量。 总的来说,学习Ruby基础不仅包括语言的基本...
Rails3 是 Ruby on Rails 框架的第三个主要版本,它在灵活性、性能和社区支持方面都有显著提升。Thinking Sphinx 是一个为 Rails 应用程序提供全文搜索功能的插件,它将数据库中的数据与 Sphinx 搜索引擎紧密结合,...
例如,在第四代(4G)和第五代(5G)移动通信系统中,多径搜索对于实现高速率、低延迟的连接至关重要。5G网络尤其强调大规模MIMO(多输入多输出)技术,其中多径搜索更是不可或缺,因为它可以帮助定位和利用多个空间...
此外,Ruby还有大量的第三方库,如Rails(一个流行的Web开发框架)和Sinatra(轻量级Web框架),它们极大地扩展了Ruby的功能。 学习Ruby,不仅需要理解其语法和概念,还需要熟悉Ruby社区的工具和实践,如Gem(Ruby...
6. **迁移数据库**: 运行`rake db:migrate`命令来执行数据库迁移,这是将Rails应用的模型定义应用到数据库的过程。 7. **启动Redmine**: 最后,你可以通过启动InstantRails的Web服务器来运行Redmine。在命令行中,...
这个压缩包文件“信号强度指示器_Swift_Ruby_下载.zip”似乎包含了一个项目,该项目可能用于在iOS设备上用Swift语言创建一个信号强度指示器。Swift是一种由Apple开发的编程语言,专为iOS、iPadOS、macOS、watchOS和...
在Ruby on Rails开发环境中,配置过程是至关重要的第一步。Rails是一个基于Ruby的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式。在安装完Ruby之后,配置Rails环境通常包括以下几个关键步骤: 1. **...
CDMA2000体制是第三代(3G)移动通信技术的一种,主要应用于提供高速数据传输服务,尤其在多媒体广播领域具有显著优势。本技术旨在提高数据传输速率,以支持高质量的音频、视频流和多媒体应用。在此压缩包中包含的...
WCDMA是非对称的第三代移动通信技术,它基于扩频码分多址的原理,能够在同一个频谱上同时传输多个数据流,提高了频率利用率。 本项目"MATLAB 仿真WCDMA 非常经典"提供了一个完整的WCDMA系统的全链路仿真模型,这...
WCDMA,全称为Wideband Code Division Multiple Access,即宽带码分多址,是一种第三代(3G)移动通信技术,广泛应用于全球许多国家的移动通信网络。这些文档集合提供了关于WCDMA技术的深入理解,涵盖了调制、解调、...
根据提供的文件信息,我们可以将其中的关键知识点归纳如下: ### 一、WCDMA概述 **1.1 相关名词** - **3G**: 第三代移动通信技术,相对第二代移动通信技术而言,旨在提供更高速的数据传输速率以及增强的服务质量。...
由于提供的文件名称列表只有一个条目 "my_app03-master",我们可以推测这可能是一个 Git 仓库的克隆,通常在 GitHub 或类似的代码托管平台上使用,其中 "master" 是主分支的名称。 在 Ruby 开发中,`my_app03-...