← Back to all languages

Ruby on Rails error tracking

Know when your Ruby on Rails app breaks, before your users do

Hooks Rails.error automatically, no further wiring needed. Self-hosted, so nothing about a Ruby on Rails app's errors or its users' data ever leaves infrastructure you control.

Install

# Gemfile
gem "forge_ops_tracker"

# config/initializers/forge_ops_tracker.rb
ForgeOpsTracker.configure do |config|
  config.dsn = ENV["FORGE_OPS_DSN"]
end

Hooks Rails.error automatically, no further wiring needed.

Every client reports the same shape

Wherever it comes from, an event arrives with an exception class, a message, and a backtrace, plus whatever environment/release/server context that client can gather on its own. ForgeOps fingerprints and groups on the first three, so a Ruby on Rails app's issues list works exactly the same way every other language's does: report the same bug a thousand times and it's still one row, not a thousand.

No agent, no sidecar: it's a plain HTTPS POST to your own ForgeOps instance's ingestion API, so nothing about a Ruby on Rails app's traffic ever leaves infrastructure you control.


Works with your framework


The Ruby on Rails client hooks in at the framework level, not by wrapping individual calls, so nothing about how you already write Ruby on Rails code has to change.


Rails 6.1+

Hooks Rails.error directly, the same reporter API Rails itself uses internally -- no middleware to add.

Sinatra

A Rack middleware wraps every request; unhandled exceptions report before Sinatra's own error page renders.

Plain Rack apps

The same middleware works for anything that speaks Rack, framework or not.

What it looks like

The issue list

Every Ruby on Rails issue reported into a project shows up here: title, status, assignee, event count, and when it was last seen, the same columns as any other language's project.

The issue list for a project reporting from a Ruby on Rails app

The issue detail

Every occurrence keeps its own timestamp, environment, release, and server, plus the backtrace exactly as Ruby on Rails reported it, expandable per occurrence rather than flattened into one generic stack.

A Ruby on Rails issue's detail page, showing its app/-relative backtrace

Alerting

A new Ruby on Rails issue, a regression, or a spike past a threshold you set can reach Slack, email, SMS, a voice call, or a generic webhook, configured per project, per trigger.

Notification rules configured per trigger and channel, e.g. a new issue to Slack, a regression to email

Heartbeats

For the failure mode error tracking can't see on its own: a Ruby on Rails cron job or recurring task that's supposed to run but silently stopped. Each heartbeat gets its own ping URL and its own grace period before it alerts.

A heartbeat's ping URL and status, showing its expected interval, grace period, and last check-in

Sidekiq

Sidekiq (7.1+) forwards job exceptions through Rails.error automatically, the same reporter API this client hooks into for everything else, so a failing background job becomes a ForgeOps issue exactly the way a failing request does: grouped, tracked, and alertable through the same notification rules. No separate Sidekiq integration to add.

A ForgeOps issue for a failing Sidekiq job, showing the job class, queue, and job ID Sidekiq reported it with

Questions

Do I need to change how I already handle errors?

No. Every client hooks the framework's own exception handling directly, the same way the install snippet above shows -- your own logs, error pages, and rescue blocks keep working exactly as they did before. ForgeOps just also finds out about it.

Where does the data actually go?

Straight to your own ForgeOps instance over plain HTTPS. No agent, no sidecar, no third-party ingestion service in between -- nothing about your app's traffic or its users' data ever leaves infrastructure you control.

What happens if the same bug fires a thousand times?

It's fingerprinted from its exception class, message, and backtrace, so a thousand reports of the same bug still show up as one issue with an event count of 1,000, not a thousand separate rows to dig through.

Is anything scrubbed before it's stored?

Yes. Emails, credit card numbers, and known API key/token formats are redacted out of every event before it's even written, on every plan, with room for per-project custom field names on top of the defaults.

Try it with your own Ruby on Rails app

Free plan included, no credit card required.

Get started free