如何执行与参数多次Rake任务?(How do I execute Rake tasks with

2019-07-31 13:05发布

它不可能invoke从一个循环内相同rake任务不止一次 。 但是,我希望能够调用rake first通过一个数组和循环,并调用second上使用不同的参数每次迭代。 由于invoke仅被执行的第一次,我试图用execute ,但耙::任务#执行不使用图示(*)操作,只需要一个参数。

desc "first task"
task :first do 
  other_arg = "bar"
  [1,2,3,4].each_with_index do |n,i|
    if i == 0 
      Rake::Task["foo:second"].invoke(n,other_arg)
    else
      # this doesn't work
      Rake::Task["foo:second"].execute(n,other_arg)
    end
  end
end

task :second, [:first_arg, :second_arg] => :prerequisite_task do |t,args|
  puts args[:first_arg]
  puts args[:second_arg]
  # ...
end

它周围的一个黑客是把对参数execute到一个数组,在second检查args来的结构,但似乎,那么,hackish的。 难道还有其他(更好?)的方式来完成我想做什么?

Answer 1:

您可以使用耙::任务#重新启用,以允许它被再次调用。

desc "first task"
task :first do 
  other_arg = "bar"
  [1,2,3,4].each_with_index do |n,i|
    if i == 0 
      Rake::Task["second"].invoke(n,other_arg)
    else
      # this does work
      Rake::Task["second"].reenable
      Rake::Task["second"].invoke(n,other_arg)
    end
  end
end

task :second, [:first_arg, :second_arg]  do |t,args|
  puts args[:first_arg]
  puts args[:second_arg]
  # ...
end

$耙第一

1
bar
2
bar
3
bar
4
bar


Answer 2:

execute功能要求一个耙:: TaskArguments作为参数,这就是为什么它只是接受一个参数。

你可以使用

stuff_args = {:match => "HELLO", :freq => '100' }
Rake::Task["stuff:sample"].execute(Rake::TaskArguments.new(stuff_args.keys, stuff_args.values))

然而,有调用和执行之间的另一个不同之处,执行不运行:当调用做到这一点首先prerequisite_task,所以调用和重新启用或执行不具有完全相同的含义。



Answer 3:

这个工作对我来说,这是很容易理解的,你只需要循环您bash命令。

task :taskname, [:loop] do |t, args|
        $i = 0
        $num = args.loop.to_i
        while $i < $num  do
        sh 'your bash command''
        $i +=1
        end
    end


文章来源: How do I execute Rake tasks with arguments multiple times?
标签: ruby rake