Rake Task 中 invoke 跟 execute 的不同

我们需要在一个 Task 里边调用另一个 Task 的时候,我们可以使用 Rake::Task['task_name'].invoke 的方式。

但需要注意 Rake::Task#invoke 在默认情况下在整个运行过程中将只会被调用一次而已。

# lib/tasks/demo.rake
namespace :demo do
  desc "Print 'Hello' string"
  task :say_hello do
    puts "Hello, World!"
  end
end
$ rake demo:say_hello
=> Hello, World!
namespace :demo do
  # ....

  desc "Print 'Hello, World!' five times"
  task :say_five_hello do
    5.times do
      Rake::Task['demo:say_hello'].invoke
    end
  end
end
$ rake demo:say_five_hello
=> Hello, World!

结果就是, Hello, World! 只打印了一次,也就是说,我们的 Rake::Task['demo:say_hello'] 只被运行了一次。

我们有两种修改方案。第一种就是将上述代码进行修改:

namespace :demo do
  # ...

  desc "Print 'Hello, World!' five times"
  task :say_five_hello do
    5.times do
      Rake::Task['demo:say_hello'].execute
    end
  end
end

或者

namespace :demo do
  # ...

  desc "Print 'Hello, World!' five times"
  task :say_five_hello do
    5.times do
      Rake::Task['demo:say_hello'].reenable
      Rake::Task['demo:say_hello'].invoke
    end
  end
end

原文出处

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor Nov 11, 2014

奉献爱心