你如何在Rake任务之间进行通信?

时间:2010-02-26 07:05:02

标签: ruby rake

假设我有一个需要编译某些文件的目标。该目标有另一个目标作为先决条件,即获取文件的目标。 我们这样说:

task :obtain do
  # obtain files from somewhere
end

task :compile => :obtain do
  # do compilation
end

假设:obtain目标并不总是将文件放在同一个文件夹中。我如何通过:compile找到:obtain找到的路径?环境变量?

2 个答案:

答案 0 :(得分:13)

在我看来,使用ENV ['something']是可取的,因为如果你这样做(而不是$ global或@instance变量),你可以将它们视为任务参数,并轻松地使用命令行中的子任务

另一方面,如果您将代码保存在单独的类/模块/方法中,您甚至不必处理那些类型的黑客攻击+您的代码将更易于测试。

答案 1 :(得分:11)

一种方法是将其存储在全局变量中:

task :obtain do
  $obtained_dir = "/tmp/obtained"
end

task :compile => :obtain do
  puts "compiling files in #{$obtained_dir}"
end

实例变量(即@obtained_dir)也应该有效。

另一种方法是将“获取”代码拉入方法,如下所示:

task :obtain do
  obtain_files
end

task :compile do
  obtained_dir = obtain_files
  puts "compiling files in #{obtained_dir}"
end

def obtain_files
  #obtain files from somewhere
  "/tmp/obtained_files"
end