Rake的使用
Rake的使用
翟志军 发表于4年前
Rake的使用
  • 发表于 4年前
  • 阅读 79
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

安装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
    

资料

标签: ruby rake
共有 人打赏支持
翟志军
粉丝 336
博文 75
码字总数 79851
作品 2
×
翟志军
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: