- Published on
全Rakeタスクにグローバルにhookをつける
調べてみるとRake::Task.tasks.each
で全タスクにenhanceする例が多く見つかったが、そうなると:environmentなど継承先のタスクにも付与されるからか、なぜか私の環境では実行したいタスクより先に実行されてしまった。 これを防ぎ正しく後から実行するにはRake::Task[Rake.application.top_level_tasks[0]]
と指定する必要があった
コード
# lib/tasks/hooks.rake
namespace :hooks do
desc "Rakeタスクの実行ログを記録するラッパー"
task after_rake: :environment do
puts "Doing #{Rake.application.top_level_tasks[0]}"
end
end
# Rakefile
require_relative "config/application"
Rails.application.load_tasks
Rake::Task[Rake.application.top_level_tasks[0]].enhance do
Rake::Task["hooks:after_rake"].invoke
end