Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 8th, 2012  |  syntax: None  |  size: 1.50 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. require "resque"
  2. require "resque/failure/multiple"
  3. require "resque/failure/redis"
  4.  
  5. # Configure Resque connection from config/redis.yml.  This file should look
  6. # something like:
  7. #   development: localhost:6379
  8. #   test: localhost:6379:15
  9. #   production: localhost:6379
  10. Resque.redis = YAML.load_file(Rails.root + 'config/redis.yml')[Rails.env]
  11.  
  12. module Resque
  13.   module Failure
  14.     # Logs failure messages.
  15.     class Logger < Base
  16.       def save
  17.         Rails.logger.error detailed
  18.       end
  19.  
  20.       def detailed
  21.         <<-EOF
  22. #{worker} failed processing #{queue}:
  23. Payload:
  24. #{payload.inspect.split("\n").map { |l| "  " + l }.join("\n")}
  25. Exception:
  26.   #{exception}
  27. #{exception.backtrace.map { |l| "  " + l }.join("\n")}
  28.         EOF
  29.       end
  30.     end
  31.  
  32.     # Emails failure messages.
  33.     # Note: uses Mail (default in Rails 3.0) not TMail (Rails 2.x).
  34.     class Notifier < Logger
  35.       def save
  36.         text, subject = detailed, "[Error] #{queue}: #{exception}"
  37.         Mail.deliver do
  38.           from "error@ ... domain ..."
  39.           to "... that would be you ..."
  40.           subject subject
  41.           text_part do
  42.             body text
  43.           end
  44.         end
  45.       rescue
  46.         puts $!
  47.       end
  48.     end
  49.   end
  50. end
  51.  
  52. Resque::Failure::Multiple.configure do |multi|
  53.   # Always stores failure in Redis and writes to log
  54.   multi.classes = Resque::Failure::Redis, Resque::Failure::Logger
  55.   # Production/staging only: also email us a notification
  56.   multi.classes << Resque::Failure::Notifier if Rails.env.production? || Rails.env.staging?
  57. end