我想在特定的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
答案 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
希望它有所帮助。