簡體   English   中英

任務組的rake參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM