其他特定Rake任务的钩子任务

时间:2015-08-25 15:00:51

标签: ruby rake

我想在特定的Rake任务之前和之后执行钩子任务。 所以,我尝试使用Task#enhance来调用钩子任务。 但是,钩子任务仅在第一个特定任务上运行。 作为一种解决方法,我在Task#enhance的块中添加了Task#reenable,如下所示。

task :task_1 => [:depending_task_1, :depending_task_2] do
  puts "executing 1..."
end

task :task_2 => [:depending_task_3] do
  puts "executing 2..."
end

task :task_3 do
  puts "executing 3..."
end

task :task_4 do
  puts "executing 3..."
end

task :task_all => [:task_1, :task_2, :task_3, :task_4] do
end

task :before_hook do
  puts 'running before_hook...'
end

task :after_hook do
  puts 'running after_hook...'
end

tasks_which_has_hook_tasks = [:task_1, :task_2, :task_3]

tasks_which_has_hook_tasks.each do |t|
  Rake::Task[t].enhance([:before_hook]) do
    Rake::Task[:after_hook].invoke

    Rake::Task[:before_hook].reenable
    Rake::Task[:after_hook].reenable
  end
end

这看起来像冗长的代码(因为使用了reenable)。 还有其他合理的方法吗?

我希望得到以下结果:task_all

(step 1) :before_hook
(step 2) :depending_task_1
(step 3) :depending_task_2
(step 4) :task_1
(step 5) :after_hook
(step 6) :before_hook
(step 7) :depending_task_3
(step 8) :task_2
(step 9) :after_hook
(step 10) :before_hook
(step 11) :task_3
(step 12) :after_hook
(step 13) :task_4

1 个答案:

答案 0 :(得分:0)

你是对的,它真的很冗长,你可以通过以下方式缩短它。

task :one do
 #Do something...
end

task :two do
 #Do some other thing...
end

task :three do
 #Do one final thing...
end

然后,您可以创建仅在所需任务执行所需操作时才会运行的任务。

task :final_task => [:one,:two,:three] do
 #This will run when the three required tasks end...
end

希望它有所帮助。