如何将参数传递给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任务也接受mode参数,但我不知道如何将mode参数传递给all_foos中的foo1和foo2。
答案 0 :(得分:1)
您可以调用all_foos任务中的任务并传入您想要的任何参数:
desc "all_foos"
task :all_foos, [ :mode ] => :environment do |task, args|
Rake::Task['foo1'].invoke args[:mode]
Rake::Task['foo2'].invoke args[:mode]
end
答案 1 :(得分: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 =
如果您的主要任务包含所有参数名称,则可以在子任务中选择所需的参数。
缺点:主要任务和子任务之间的调用顺序不同。