使用前/后钩子包装耙子任务

use*_*003 4 rake ruby-on-rails

我的 rails 应用程序在下面定义了几个自定义 rake 任务 lib/tasks/*

当这些任务中的任何一个运行时,我想输出日志STARTSTOP消息。

对于个人耙任务,我可以做类似的事情

namespace :foo do
  task :bar, [:some_arg] => :some_pre_requisite do |t, args|
    Rails.logger.info "Rake START - {task: \"#{t}\", args: #{args}}"

    # Do stuff

    Rails.logger.info "Rake STOP - {task: \"#{t}\", args: #{args}}"
  end
end
Run Code Online (Sandbox Code Playgroud)

这将运行一个接受参数的 rake 任务:some_arg,运行一个先决任务 ( :some_pre_requisite),然后运行该任务。它在说我的任务已经开始和停止之前和之后输出日志语句。

如果我有几十个任务,这会变得非常重复。我想用其他一些方法“包装”耙子任务

  • 打印START语句
  • 调用/产生/运行实际的耙子任务
  • 打印STOP语句

我知道我可以将第一次打印设置为先决条件,然后将第二次打印设置为单独的增强任务,但这感觉很混乱。它将两个打印语句存储在不同的位置,而且我必须enhance单独手动执行每个任务。

关于如何实现这一点的任何更好的想法?

谢谢!

Dor*_*ian 5

关于后钩:

Rake::Task['db:migrate'].enhance do
  puts "AFTER"
end
Run Code Online (Sandbox Code Playgroud)

http://ruby-doc.org/stdlib-2.0.0/libdoc/rake/rdoc/Rake/Task.html#method-i-enhance

对于前钩(未经测试):

task :before do
  puts "BEFORE"
end

Rake::Task['db:migrate'].enhance(['before'])
Run Code Online (Sandbox Code Playgroud)