Skip to main content
Hanami are officially supported. Instrumenting Hanami applications requires some manual setup. Follow the installation steps in AppSignal, starting by clicking ‘Add app’ on the accounts screen.
Is your application using a combination of Rails, Grape, Hanami, Padrino or Sinatra? Follow our guide for instrumenting multiple Rack applications.
This page describes the integration for the Hanami framework, installed via the “hanami” gem. The Hanami::API framework (from the “hanami-api” gem) is not supported.

Installation

After installing the AppSignal gem, add the AppSignal integration after requiring hanami/boot in the config.ru file.

Exception handling

Hanami doesn’t have any exception handling by default. The web server (like Puma or Unicorn) will show a basic “internal server error” page if an error occurs in the app. These unhandled exceptions will be reported to AppSignal automatically. The Hanami exception handling guide explains how to add custom exception handling to Hanami applications to render custom error pages. Handled exceptions will not be reported to AppSignal automatically. We recommend adding the following code to the application’s base Action class found in app/action.rb to add exception handling for StandardError. This way, adding exception handling to every action class is unnecessary. In the handle_standard_error method, configured by handle_exception, call the Appsignal.report_error helper to report the exception to AppSignal and not miss any errors reported by your app. (Use the Appsignal.set_error helper when using Ruby gem version 3 or older.)
After you add the Appsignal.report_error method to the Hanami exceptions you want to report, AppSignal will report these errors whenever they occur.

Span attributes

Collector mode only: this applies when AppSignal for Ruby runs in collector mode. It has no effect otherwise.
The request’s span carries:
  • http.request.method — the request method.
  • url.scheme, url.path, and url.query — the address that was requested.
  • http.response.status_code — the status your application responded with.
A span for a request that raised also carries error.type, the class of the error.

Distributed tracing

Collector mode only: this applies when AppSignal for Ruby runs in collector mode. It has no effect otherwise.
A request that arrives with a traceparent request header continues the trace it names. The request appears inside the calling service’s trace, under the request that caused it. You can follow a slow request from that service into this application without switching traces. The HTTP clients AppSignal supports start the trace. A request without the header starts a new one.