2

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

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 怎么办?希望这是有道理的。

我以为谷歌会想出一些东西,但没有。非常感谢 :)

4

2 回答 2

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
于 2013-07-28T17:24:24.780 回答
2

它不完全适合您的问题,但可能会显示另一种使用 rake 参数的方法并将它们转发给子任务。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}  
于 2013-07-28T19:58:11.540 回答