2013-11-27 83 views
0

如何將參數傳遞給組的 rake任務?任務組的rake參數

我可以傳遞參數給每個單獨的任務(foo1和Foo2):

desc "foo1" 
task :foo1, [ :mode ] => :environment do |t, args| 

    mode = args[:mode] 
    puts "foo1 mode = #{mode}" 

end 

desc "foo2" 
task :foo2, [ :mode ] => :environment do |t, args| 

    mode = args[:mode] 
    puts "foo2 mode = #{mode}" 

end 

desc "all_foos" 
task :all_foos, [ :mode ] => [ :foo1, :foo2 ] 

正如你所看到的,foo1和foo2的在all_foos進行分組。 all_foos任務也接受模式參數,但我不知道如何將模式參數傳遞給all_foos中的foo1和foo2。

回答

1

您可以從您的all_foos任務調用任務,並通過在任何你想要的ARGS:

desc "all_foos" 
task :all_foos, [ :mode ] => :environment do |task, args| 
    Rake::Task['foo1'].invoke args[:mode] 
    Rake::Task['foo2'].invoke args[:mode] 
end 

下面是更多:How to run Rake tasks from within Rake tasks?

+0

你用來學習'Rake'的哪個教程。我也在學習'Rake'。 –

+0

我閱讀文檔http://rake.rubyforge.org/doc/rakefile_rdoc。html – DiegoSalazar

+0

這就是爲什麼我總是喜歡官方文檔 –

0

你嘗試你的代碼?

當我執行你的代碼

require 'rake' 

task :environment 

desc "foo1" 
task :foo1, [ :mode ] => :environment do |t, args| 

    mode = args[:mode] 
    puts "foo1 mode = #{mode}" 

end 

desc "foo2" 
task :foo2, [ :mode ] => :environment do |t, args| 

    mode = args[:mode] 
    puts "foo2 mode = #{mode}" 

end 

desc "all_foos" 
task :all_foos, [ :mode ] => [ :foo1, :foo2 ] 

Rake.application['all_foos'].invoke('par1') 

我得到

foo1 mode = par1 
foo2 mode = par1 

隨着

Rake.application['all_foos'].invoke('par2') 

我得到:

foo1 mode = par2 
foo2 mode = par2 

這是您想要的解決方案。

備註: Rake.application['all_foos'].invoke('par2')是一樣的外部耙呼叫rake all_foos[par2]


再進一步:您還可以使用不同的參數。

檢查這個代碼:

require 'rake' 

task :environment 

desc "foo1" 
task :foo1, [ :mode1 ] => :environment do |t, args| 

    mode = args[:mode1] 
    puts "foo1 mode = #{mode}" 

end 

desc "foo2" 
task :foo2, [ :mode2 ] => :environment do |t, args| 

    mode = args[:mode2] 
    puts "foo2 mode = #{mode}" 

end 

desc "all_foos" 
task :all_foos, [ :mode1, :mode2 ] => [ :foo1, :foo2 ] 

Rake.application['all_foos'].invoke('par1', 'par2') 

隨着Rake.application['all_foos'].invoke('par1', 'par2')(或rake all_foos[par1,par2])我得到:

foo1 mode = par1 
foo2 mode = par2 

隨着Rake.application['all_foos'].invoke('par1', 'par2')(或rake all_foos[par1,par2])我得到:

foo1 mode = par1 
foo2 mode = par2 

隨着Rake.application['all_foos'].invoke(nil, 'par2')我得到

foo1 mode = 
foo2 mode = par2 

隨着Rake.application['all_foos'].invoke('par1')我得到

foo1 mode = par1 
foo2 mode = 

如果你的主要任務包括所有參數的名字,你可以挑選你的子任務所需要的參數。

缺點:調用的順序在主任務和子任務之間是不同的。