假设我有一个需要编译某些文件的目标。该目标有另一个目标作为先决条件,即获取文件的目标。 我们这样说:
task :obtain do
# obtain files from somewhere
end
task :compile => :obtain do
# do compilation
end
假设:obtain
目标并不总是将文件放在同一个文件夹中。我如何通过:compile
找到:obtain
找到的路径?环境变量?
答案 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