[英]rake argument for task group
如何將參數傳遞給一組 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參數,但是我不知道如何在all_foos中將mode參數傳遞給foo1和foo2。
您可以從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
還有更多信息: 如何從Rake任務中運行Rake任務?
您是否嘗試過代碼?
當我執行你的代碼
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調用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 =
如果主任務包含所有參數名稱,則可以在子任務中選擇所需的參數。
缺點:調用的順序在主要任務和子任務之間有所不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.