2013-07-28 34 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

相關問題