2013-11-27 1 views
0

Как передать аргумент группе задач рейка?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 foo1 и foo2 в all_foos.

ответ

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 

Вот еще: How to run Rake tasks from within Rake tasks?

+0

Какой учебник вы использовали для изучения «Рейк». Я также изучаю «Рейк». –

+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') I get

foo1 mode = 
foo2 mode = par2 

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

foo1 mode = par1 
foo2 mode = 

Если ваша главная задача содержит все имена параметров, вы можете выбрать необходимые параметры в своих подзадач.

Недостаток: последовательность в вызове отличается между основной задачей и подзадачами.

Смежные вопросы