我们有许多Rake和Runner脚本由cron通过Whenever gem执行。我们最近发现其中一个失败超过一天,我们没有注意到它。是否有一种很好的方法来捕获并报告后台作业中的错误?我们有NewRelic用于监控,但它似乎没有发现这些问题。
理想情况下,我喜欢一个可以实现的解决方案,一旦神奇地适用于所有Whenever / cron Rake / Runner脚本。
答案 0 :(得分:4)
具体来说,对于rake任务,您可以安装newrelic-rake
gem。这个gem应该允许你记录任何rake任务中发生的错误(尽管它不会捕获'rails runner'调用中的错误。)
对于rails runner调用,您可以定义一个简单的跟踪包装器,并将每个“runner”调用包装在该包装器的schedule.rb
文件中。
例如,如果您在config/initializers/trace_wrapper.rb
中有以下内容:
require 'newrelic_rpm'
module TraceWrapper
extend NewRelic::Agent::Instrumentation::ControllerInstrumentation
def self.trace(task_name)
perform_action_with_newrelic_trace(name: task_name, category: :task) do
yield
end
end
end
...然后您可以更改schedule.rb
中的'跑步者'调用以包含在此调用中,如下所示:
every 1.minutes do
runner "TraceWrapper.trace('compile models') { MyModel.compile }"
end
您需要为rails runner
文件中的每个schedule.rb
次调用执行此操作。
答案 1 :(得分:2)
我使用了user1816629的答案,但略微修改了它以使TraceWrapper代码更简洁。我的schedule.rb看起来像:
every 1.minutes do
runner "TraceWrapper.trace 'MyModel.compile'"
end
这是TraceWrapper:
module TraceWrapper
extend NewRelic::Agent::Instrumentation::ControllerInstrumentation
def self.trace(operation)
perform_action_with_newrelic_trace(:name => operation, :category => :task) do
eval operation
end
end
end