4

Is there a exception_notification-like gem for delayed_job? Preferably that works with REE-1.8.7 and Rails 2.3.10.

abhas
  • 5,193
  • 1
  • 32
  • 56
razenha
  • 7,660
  • 6
  • 37
  • 53
  • When using Resque, [this little gem](https://github.com/akshayrawat/resque_exception_notification) reports exceptions via exception_notification. – Akshay Rawat Mar 25 '13 at 06:17

2 Answers2

3

I've done something like this in the past for delayed job rake tasks:

require 'action_mailer'
class ExceptionMailer < ActionMailer::Base
  def setup_mail
    @from = ExceptionNotifier.sender_address
    @sent_on = Time.now
    @content_type = "text/plain"
  end

  def exception_message(subject, message)
    setup_mail
    @subject = subject
    @recipients = ExceptionNotifier.exception_recipients
    @body = message
  end
end

namespace :jobs do
desc "sync the local database with the remote CMS"
task(:sync_cms => :environment) do
  Resort.sync_all!
  result = Delayed::Job.work_off
  unless result[1].zero?
    ExceptionMailer.deliver_exception_message("[SYNC CMS] Error syncing CMS id: #{Delayed::Job.last.id}", Delayed::Job.last.last_error)
  end
end

end

heavysixer
  • 2,069
  • 17
  • 25
2

Include this module in classes which are to be delayed:


require 'exception_notifier'
module Delayed
  module ExceptionNotifier
    # Send error via exception notifier
    def error(job, e)
      env = {}
      env['exception_notifier.options'] = {
        :sections => %w(backtrace delayed_job),
        :email_prefix => '[Delayed Job ERROR] ',
        :exception_recipients => %w(some@email.com),
        :sender_address => %(other@email.com)
      }
      env['exception_notifier.exception_data'] = {:job => job}
      ::ExceptionNotifier::Notifier.exception_notification(env, e).deliver
    end
  end
end

and create a template for the notification in app/views/exception_notifier/_delayed_job.text.erb:


Job name: <%= @job.name %>
Job: <%= raw @job.inspect %>

* Process: <%= raw $$ %>
* Server : <%= raw `hostname -s`.chomp %>
Roman
  • 13,100
  • 2
  • 47
  • 63