如何将参数从子任务传递到Rake中的父任务

时间:2013-07-28 17:15:23

标签: ruby-on-rails ruby rake rake-task

我试过调用,但我不认为这会有所帮助。这是我试图实现的简短演示。

task :first_task  => :dep do 
   puts "something else"

end

task :dep do
   puts "something"
end

如果我跑

rake first_task
从命令行

,依赖关系得到满足,然后执行first_task。

 something
 something else

但是如果我有一个值,请说:dep中的dir =“testdir”我想作为参数传递给:first_task?希望这是有道理的。

我认为谷歌会想出一些东西,但不是。非常感谢:)

2 个答案:

答案 0 :(得分:3)

不确定您是否可以设置或传递参数,但可以使用实例变量:

task :first_task  => :dep do
   puts "something else"
   puts @dir
end

task :dep do
  puts "something"
  @dir = "Foo"
end

或者只是局部变量:

dir = "default_dir"

task :first_task  => :dep do
   puts "something else"
   puts dir
end

task :dep do
  puts "something"
  dir = "Foo"
end

对于某些类型的任务,设置环境变量可能更有意义:

task :first_task  => :dep do
   puts "something else"
   puts ENV['dir']
end

task :dep do
  puts "something"
  ENV['dir'] = "Foo"
end

答案 1 :(得分:2)

它不完全适合您的问题,但可能会显示另一种方法,用于参数和rake并将它们转发给子任务。耙子任务可能会获得参数。

一个例子:

task :first_task, [:par1, :par2] do |t, args|
  puts "#{t}: #{args.inspect}"
end

您可以使用rake first_task[1,2]调用此任务。结果将是:

first_task: {:par1=>1, :par2=>2}

如果这些参数共享相同的密钥,则会将其转发给子任务。例如:

task :first_task, [:par1, :par2] => :second_task do |t, args|
  puts "#{t}: #{args.inspect}"
end

task :second_task, :par2 do |t, args|
  puts "#{t}: #{args.inspect}"
end

结果:

second_task: {:par2=>2}
first_task: {:par1=>1, :par2=>2}