首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Hoptoad与DelayedJob和DaemonSpawn集成?

如何将Hoptoad与DelayedJob和DaemonSpawn集成?
EN

Stack Overflow用户
提问于 2009-08-14 05:16:13
回答 4查看 1.7K关注 0票数 5

我一直很高兴地使用DelayedJob成语:

代码语言:javascript
复制
foo.send_later(:bar)

这将调用DelayedJob进程中对象foo上的方法栏。

我一直在使用DaemonSpawn来启动服务器上的DelayedJob进程。

但是..。如果foo抛出一个异常,Hoptoad就不会捕捉到它。

这是这些包裹里的虫子吗..。还是我需要改变一些配置..。还是我需要在DS或DJ中插入一些异常处理来调用Hoptoad通知程序?

作为对下面第一条评论的回应。

代码语言:javascript
复制
class DelayedJobWorker < DaemonSpawn::Base
def start(args)
  ENV['RAILS_ENV'] ||= args.first || 'development'
  Dir.chdir RAILS_ROOT
  require File.join('config', 'environment')

  Delayed::Worker.new.start
end
EN

回答 4

Stack Overflow用户

发布于 2011-08-24 04:56:06

尝试猴子识别Delayed::Worker#handle_failed_job:

代码语言:javascript
复制
# lib/delayed_job_airbrake.rb

module Delayed
  class Worker

    protected

    def handle_failed_job_with_airbrake(job, error)
      say "Delayed job failed -- logging to Airbrake"
      HoptoadNotifier.notify(error)
      handle_failed_job_without_airbrake(job, error)
    end

    alias_method_chain :handle_failed_job, :airbrake

  end
end

这对我有用。

(在Rails 3.0.10应用程序中使用delayed_job 2.1.4和hoptoad_notifier 2.4.11)

票数 5
EN

Stack Overflow用户

发布于 2009-09-14 17:55:05

找出延迟的来源::工作.有一个片段,就像:

代码语言:javascript
复制
# This is a good hook if you need to report job processing errors in additional or different ways
def log_exception(error)
  logger.error "* [JOB] #{name} failed with #{error.class.name}: #{error.message} - #{attempts} failed attempts"
  logger.error(error)
end

我还没试过,但我想你可以这样做:

代码语言:javascript
复制
class Delayed::Job
  def log_exception_with_hoptoad(error)
    log_exception_without_hoptoad(error)
    HoptoadNotifier.notify(error)
  end

  alias_method_chain :log_exception, :hoptoad
end
票数 3
EN

Stack Overflow用户

发布于 2009-08-18 13:14:21

Hoptoad使用Rails rescue_action_in_public钩子方法来拦截异常并记录它们。只有当请求由Rails控制器发出时,才会执行此方法。因此,Hoptoad完全不知道由rake任务或rails脚本/runner生成的任何异常。

如果您想让Hoptoad跟踪您的异常,您应该手动集成它。应该很直截了当。下面的代码片段演示了如何调用Hoptoad

代码语言:javascript
复制
def rescue_action_in_public_with_hoptoad exception
  notify_hoptoad(exception) unless ignore?(exception) || ignore_user_agent?
  rescue_action_in_public_without_hoptoad(exception)
end

只需在您的环境中包含Hoptoad库并调用notify_hoptoad(exception)即可。确保您的环境提供了Rails控制器或Hoptoad可能会抱怨的相同API。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1276164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档