Using Honeybadger with the Roda framework

Mar 23, 2015

Recently at work–for smaller internal projects–we have been using Roda in place of microframeworks like Sinatra or Hobbit. It’s been a great experience. Promoting these projects from toy to dependable meant adding error tracking.

Honeybadger is our error tracker of choice, and the integration was pretty straightforward, but it took me some spelunking to get things working.

First pass was setting up the rack middleware per honeybadger’s documentation:

# server.rb
require 'roda'
require 'honeybadger'

class Server < Roda
  HONEYBADGER_CONFIG = Honeybadger::Config.new

  Honeybadger.start HONEYBADGER_CONFIG
  use Honeybadger::Rack::ErrorNotifier,   HONEYBADGER_CONFIG
  use Honeybadger::Rack::MetricsReporter, HONEYBADGER_CONFIG

  # routes, etc ...
end

Which worked great, up until I wanted to show a custom error page. So I added an error handler, and things stopped working. Since Roda’s error_handler plugin was catching the exception, it was no longer bubbling up to be caught by honeybadger–so no notification.

A little digging revealed that honeybadger’s error notifier will look for some keys in the rack env hash. So if you set them you, the notification will be sent out like expected. When defining your error handler, set env['honeybadger.exception'] to the exception and the notification will be sent.

plugin :error_handler do |e|
  env['honeybadger.exception'] = e
  # call error view, etc ..
end