【问题标题】:Wrapping a rake task with a before/after hook使用前/后挂钩包装 rake 任务
【发布时间】:2018-12-20 13:18:57
【问题描述】:

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

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

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

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

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

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

  • 打印START 语句
  • 调用/生成/运行实际调用的 rake 任务
  • 打印STOP 语句

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

关于如何实现这一点有什么更好的想法吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails rake


    【解决方案1】:

    关于后钩:

    Rake::Task['db:migrate'].enhance do
      puts "AFTER"
    end
    

    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'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多