Super Exception Notifier
NOTE: This is a legacy gem, for rails 2.x
The Super Exception Notifier (SEN) gem provides a mailer object and a default set of templates for sending email notifications when errors occur in a Rails application, as well as a default set of error page templates to render based on the status code assigned to an error.
Project | Super Exception Notifier |
---|---|
gem name | super_exception_notifier |
license | MIT |
moldiness | |
version | |
dependencies | |
code quality | |
continuous integration | |
test coverage | |
homepage | https://github.com/pboling/exception_notification |
documentation | http://rdoc.info/github/pboling/exception_notification/frames |
author | Peter Boling |
Spread |
Summary
The gem is configurable, allowing programmers to customize (settings are per environment or per class):
- the sender address of the email
- the recipient addresses
- text used to prepend and append the subject line
- the HTTP status codes to send emails for
- the error classes to send emails for
- alternatively, the error classes to not send emails for
- whether to send error emails or just render without sending anything
- the HTTP status and status code that gets rendered with specific errors
- the view path to the error page templates
- custom errors, with custom error templates
- fine-grained customization of error layouts (or no layout)
- get error notification for errors that occur in the console, using notifiable method
- Hooks into
git blame
output so you can get an idea of who (may) have introduced the bug - Hooks into other website services (e.g. you can send exceptions to to Switchub.com)
- Specify which level of notification you would like with an array of optional styles of notification: [:render, :email, :web_hooks]
- Can notify of errors occurring in any method in any class in Ruby by wrapping the method call like this: notifiable { method }
- Can notify of errors in Rake tasks using 'NotifiedTask.new' instead of 'task' when writing tasks
- Works with Hoptoad Notifier, so you can notify via SEN and/or Hoptoad for any particular errors.
- Tested with Rails 2.3.x, should work with Rails 2.2.x, and is apparently not compatible with Rails 3 or 4.
The email includes information about the current request, session, and environment, and also gives a backtrace of the exception.
This gem is based on the wonderful exception_notification plugin created by Jamis Buck. I have modified it extensively and merged many of the improvements from a dozen or so other forks. It remains a (mostly) drop in replacement with greatly extended functionality and customization options. I keep it up to date with the work on the core team's branch.
The venerable original is here
The current version of this gem is a git fork of the original and has been updated to include the latest improvements from the original, and many improvements from the other forks on github. I merge them in when I have time, and when the changes fit nicely with the enhancements I have already made.
This fork of Exception Notifier is (or was at some point) in production use on several large websites (top 5000).
Installation as RubyGem
[sudo] gem install super_exception_notifier
More Installation Options are here: http://wiki.github.com/pboling/exception_notification/installation
Configuration as RubyGem in Rails 2.x
(UPGRADE NOTE: The name of the lib changed from SEN version 2.x to 3.x)
config.gem 'super_exception_notifier', :lib => "exception_notification"
More Configuration Options are here: http://wiki.github.com/pboling/exception_notification/configuration
Configuration In Environment (Initializer)
(UPGRADE NOTE: The class invoked here changed from SEN version 2.x to 3.x)
ExceptionNotification::Notifier.configure_exception_notifier do |config|
config[:app_name] = "[MYAPP]"
config[:sender_address] = "super.exception.notifier@example.com"
config[:exception_recipients] = [] # You need to set at least one recipient if you want to get the notifications
# In a local environment only use this gem to render, never email
#defaults to false - meaning by default it sends email. Setting true will cause it to only render the error pages, and NOT email.
config[:skip_local_notification] = true
# Error Notification will be sent if the HTTP response code for the error matches one of the following error codes
config[:notify_error_codes] = %W( 405 500 503 )
# Error Notification will be sent if the error class matches one of the following error classes
config[:notify_error_classes] = %W( )
# What should we do for errors not listed?
config[:notify_other_errors] = true
# If you set this SEN will attempt to use git blame to discover the person who made the last change to the problem code
config[:git_repo_path] = nil # ssh://git@blah.example.com/repo/webapp.git
end
More Configuration Options: http://wiki.github.com/pboling/exception_notification/advanced-environment-configuration
Handling Errors in Request Cycle
-
Include the ExceptionNotification::ExceptionNotifiable mixin in whichever controller you want to generate error emails (typically ApplicationController) as below.
-
Specify the email recipients in your environment as above. (You may have already done this in the "Configuration in Environment (Initializer)" section above):
-
Make sure you have your ActionMailer server settings correct if you are using the e-mail features.
-
That’s it! The defaults take care of the rest.
Code:
class ApplicationController < ActionController::Base
############################################################
# ERROR HANDLING et Foo
include ExceptionNotification::ExceptionNotifiable
#Comment out the line below if you want to see the normal rails errors in normal development.
alias :rescue_action_locally :rescue_action_in_public if Rails.env == 'development'
#self.error_layout = 'errors'
self.exception_notifiable_verbose = true #SEN uses logger.info, so won't be verbose in production
self.exception_notifiable_pass_through = :hoptoad # requires the standard hoptoad gem to be installed, and setup normally
self.exception_notifiable_silent_exceptions = [Acl9::AccessDenied, MethodDisabled, ActionController::RoutingError ]
#specific errors can be handled by something else:
rescue_from 'Acl9::AccessDenied', :with => :access_denied
# END ERROR HANDLING
############################################################
...
end
ExceptionNotification::Notifier.configure_exception_notifier do |config|
config[:exception_recipients] = %w(joe@example.com bill@example.com)
end
http://wiki.github.com/pboling/exception_notification/exceptions-inside-request-cycle
Advanced Configuration
There is a lot more you can configure, and do:
http://wiki.github.com/pboling/exception_notification/
Authors
Peter Boling is the original author of the code, and current maintainer.
Contributors
See the Network View and the CHANGELOG
How you can help!
Take a look at the reek
list which is the file called REEK
and stat fixing things. Once you complete a change, run the tests:
bundle exec rake test:all
If the tests pass refresh the reek
list (need to run in Ruby 1.9.2 or 1.9.3):
bundle exec rake reek > REEK
Follow the instructions for "Contributing" below.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Added some feature'
) - Push to the branch (
git push origin my-new-feature
) - Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
- Create new Pull Request
Versioning
This library aims to adhere to Semantic Versioning 2.0.0. Violations of this scheme should be reported as bugs. Specifically, if a minor or patch version is released that breaks backward compatibility, a new version should be immediately released that restores compatibility. Breaking changes to the public API will only be introduced with new major versions.
As a result of this policy, you can (and should) specify a dependency on this gem using the Pessimistic Version Constraint with two digits of precision.
For example:
spec.add_dependency 'super_exception_notifier', '~> 3.0.14'
References
- Source Code
- A popular fork/rewrite of this fork
- An old fork of my original source on Google Code
- The Original Source on Google Code
- Getting it to work on Stack Overflow & my response
- Getting it to work on PasteBin
Legal
- MIT License - See LICENSE file in this project
- Copyright (c) 2008-2014 Peter H. Boling of Rails Bling