2013-07-28 32 views
2

我尝试过调用,但我认为这不会有帮助。这是我尝试实现的一个简短演示。如何将一个参数从一个子任务传递给Rake中的父任务

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

end 

task :dep do 
    puts "something" 
end 

如果我在命令行中运行

rake first_task 

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

something 
something else 

但是,如果我有一个值,说DIR =“TESTDIR”在哪:DEP,我想作为参数传递到:first_task?希望这是有道理的。

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

回答

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 
+0

非常感谢这一点。我不知道这可以轻松实现:)本地变量不会在我的情况下做到这一点,但感谢您指出实例变量和环境变量。我完全忘了他们。 – TradeRaider

2

它并不完全适合你的问题,但是可能会显示另一种耙子参数的方法,并将它们转发给子任务。 Rake任务可能会获取参数。

一个例子:

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

您可以致电此任务与结果将是:

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} 
+0

哈!我也不知道这一点。我认为它适合我的情况。我试图缩短代码,这看起来不错。谢谢 :) – TradeRaider

相关问题