文档章节

Rake的使用

翟志军
 翟志军
发布于 2014/06/12 22:27
字数 639
阅读 202
收藏 0

安装Rake

	gem install rake

查看任务列表

	rake -T

运行一个任务

	rake task_name

指定一个文件名或才文件夹来运行任务

	rake mydoc.pdf

看帮助

	rake -h
	rake --help

定义任务

每个任务都包含三部分内容:

  • 描述(不设置,也可以,只是rake -T的时候,此任务将不会显示)
  • 任务名(如果多个任务名相同,则最后一个定义的将会覆盖前面定义的)
  • 任务执行代码

e.g.

desc "One line task description"
task :name_of_task do
	#your code goes here				
end

任务之间的依赖

	desc "Example of a task with prerequisites"
	task :third_task => ["first_task", "second_task"] do
	#Your code goes here
	end

third_task运行时,首先会检查first_task和second_task是否已经运行。

传参数给任务

	desc "Example of task with parameters and prerequisites"
	task :my_task, [:first_arg, :second_arg] => ["first_task", "second_task"] do |t, args|
	args.with_defaults(:first_arg => "Foo", :last_arg => "Bar")
	puts "First argument was: #{args.first_arg}"
	puts "Second argument was: 			#{args.second_arg}"
	end
	
	rake my_task[one, two]

有时,执行rake my_task[one, two]时会报找不到该任务,这时,你需要这样执行:rake "my_task[one, two]"

参数间用逗号分隔,不能有空格

设置默认任务

	task :default => ['my_task']
	
	
	task :default do
	
	end

有以上两种方式

在其中一个任务中调用另一个任务

desc "Example of task with invoke"
task :first_task do
	Rake::Task[:second_task].invoke
end

清理任务

	require 'rake/clean'
	CLEAN.include('*.tmp')
	CLOBBER.include('*.tmp','build/*')

在任务中使用其它库

require 'erb'

OUTPUT_FILE='README.html'
TEMPLATE_FILE='template.html.erb'

def get_template
	File.read(TEMPLATE_FILE)
end

desc "Builds the HTML file, using ERB."
file OUTPUT_FILE do
	File.open(OUTPUT_FILE, "w+") do |f|
		f.write(ERB.new(get_template).result())
	end
end

task :default => [OUTPUT_FILE]

使用shell命令

require 'fileutils'

#Stuff...

task :run_command do
	sh %{ space separated command and options }
end

需要引入fileutils

sh方法输出:状态、运行结果

sh %{grep pattern file} do |ok, res|
	if ! ok
	puts "pattern not found (status = #{res.exitstatus})"
	end
end

使用环境变量

desc "Task description"
	task :name_of_task do
	my_setting1 = ENV['HOME']
	my_setting2 = ENV['MY_VAR']
	# Your code goes here
end

命名空间

为了避免任务名之间的冲突。

namespace 'build' do

	# tasks...  

end

namespace 'test' do

	# tasks...

	namespace 'unit' do
	# tasks...
	end

end

使用的时候就是,rake 命名空间:命名空间:任务名

可动态定义task

require 'yaml'

# Uses FileList to get an Array of the configuration files
CONFIG_FILES=FileList['config/*.yml']

# Returns the configuration from the file as a Hash object
def get_config(file)
  YAML.load_file(file)
end

CONFIG_FILES.each do |f|

  config = get_config(f)

  namespace config[:name] do

    # Generate tasks

    desc "First task for #{config[:name]}"
    task config[:first] do
      # Code goes here
    end

    desc "Second task for #{config[:name]}"
    task config[:second] do
      # Code goes here
    end

    # more...

  end

end

rake特定Rakefile

	rake --rakefile my_task_file my_task

取消rake输出

rake --silent my_task

为任务设置特定环境亦是

	rake my_task my_var1='Some value' my_var2='Another value'

调试

  • 查看执行步骤,而不真正执行

      rake --dry-run my_task
    
  • 日志

      rake --trace my_task
    

资料

© 著作权归作者所有

共有 人打赏支持
翟志军

翟志军

粉丝 347
博文 76
码字总数 79851
作品 2
深圳
程序员
私信 提问
执行rake db:migrate时的两个错误

rails的确是来的方便,一个rails generate scaffold命令下来就可以生成view、controller和model的所有文件,然后再执行rake db:migrate就可以生成相应的数据库表结构。而就是这个简单的rake ...

kjmeng
2011/07/05
0
0
软件构建工具--Rake

Make 是一个 UNIX® 的本机实用程序,是为管理软件编译过程而设计的。它十分通用,足以用于许多其他环境中,即使它已用于将文档编译成书,维护 Web 站点以及裁减发行版。但是,make 也有自身...

匿名
2008/09/25
6.1K
1
利用Octopress在github pages上搭建个人博客

利用Octopress在github pages上搭建个人博客 SEP 29TH, 2013 在GitHub Pages上用Octopress搭建博客,需要安装ruby环境、git环境等。本人在Fedora下成功搭建Octopress,这里把主要步骤和遇到的...

lovedan
2013/09/29
0
0
安装redmine初始化数据库时候报错

1.相关环境: ubutu12.04 mysql5.5 ruby2.1 redmine3.3 gem 2.2.5 rails 4.2.6 2.redmin的配置文件配置如下: database.yml: production: adapter: mysql2 database: redmine host: 127.0.0.......

渺渺星辰
2016/09/06
340
0
debian 安装redmine1.2.2 使用apt-get安装ruby环境、mysql、手...

安装环境 ruby相关的 apt-get install binutils build-essential bzip2 ca-certificates cpp cpp-4.4 dbconfig-common dpkg-dev fakeroot g++ g++-4.4 gcc gcc-4.4 git git-core javascript......

神勇小白鼠
2011/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
12
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
5
0
my.ini

1

architect刘源源
今天
7
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
8
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部