Class: Racknga::Middleware::ExceptionNotifier — racknga - Ranguba

Class: Racknga::Middleware::ExceptionNotifier

Inherits:
Object
  • Object
show all
Defined in:
lib/racknga/middleware/exception_notifier.rb

Overview

This is a middleware that mails exception details on error. It’s useful for finding your Rack application troubles.

Usage:

require "racknga"

notifier_options = {
  :subject_label => "[YourApplication]",
  :from => "reporter@example.com",
  :to => "maintainers@example.com",
}
notifiers = [Racknga::ExceptionMailNotifier.new(notifier_options)]
use Racknga::Middleware::ExceptionNotifier, :notifiers => notifiers
run YourApplication

Instance Method Summary (collapse)

Constructor Details

- (ExceptionNotifier) initialize(application, options = {})

A new instance of ExceptionNotifier



39
40
41
42
43
# File 'lib/racknga/middleware/exception_notifier.rb', line 39

def initialize(application, options={})
  @application = application
  @options = Utils.normalize_options(options || {})
  @notifiers = @options[:notifiers] || []
end

Instance Method Details

- (Object) call(environment)

For Rack.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/racknga/middleware/exception_notifier.rb', line 46

def call(environment)
  @application.call(environment)
rescue Exception => exception
  @notifiers.each do |notifier|
    begin
      notifier.notify(exception, environment)
    rescue Exception
      begin
        $stderr.puts("#{$!.class}: #{$!.message}")
        $stderr.puts($@)
        $stderr.puts("-" * 10)
        $stderr.puts("#{exception.class}: #{exception.message}")
        $stderr.puts(exception.backtrace)
      rescue Exception
      end
    end
  end
  raise
end