Status page and uptime monitoring for Rails apps
Monitor Rails controllers, Active Record connections, Sidekiq queues, and Redis. Pretty status page or build your own via our API.
Three ways to ship a status page for Ruby on Rails
Pick the level of control you need — zero-code, low-code, or full headless.
Hosted
Add your Ruby on Rails endpoint, point a CNAME at status.yourdomain.com, done. Works in 5 minutes.
Headless
Use our public API to build your own UI inside your Ruby on Rails app. Full control over design and branding.
See the APIEmbedded badges
Drop SVG uptime and status badges into your README or landing page. Auto-updates every 5 minutes.
Drop this health endpoint into your Ruby on Rails app
Copy, paste, point PulseAPI at the URL. Returns 200 when healthy, 503 when degraded.
class HealthController < ApplicationController
skip_before_action :authenticate_user!, raise: false
def show
checks = {
database: active_record_ok? ? "ok" : "fail",
cache: cache_ok? ? "ok" : "fail",
sidekiq: sidekiq_ok? ? "ok" : "fail",
}
healthy = checks.values.all? { |v| v == "ok" }
render json: { status: healthy ? "healthy" : "degraded", **checks },
status: healthy ? 200 : 503
end
private
def active_record_ok?
ActiveRecord::Base.connection.execute("SELECT 1") && true
rescue StandardError
false
end
def cache_ok?
Rails.cache.write("health:probe", "1", expires_in: 5.seconds)
Rails.cache.read("health:probe") == "1"
rescue StandardError
false
end
def sidekiq_ok?
Sidekiq.redis { |c| c.ping == "PONG" }
rescue StandardError
false
end
endWire with `get "/health", to: "health#show"` in routes.rb. Skip CSRF, auth, and any middleware that would 401 a probe.
What breaks in Ruby on Rails apps — and how to catch it
Sidekiq queues silently growing
A stuck worker lets a queue balloon while the app keeps serving traffic. Expose queue-depth and alert on threshold.
N+1 regressions
A missing .includes() can 10x response time. Response-time assertions catch it in the first minute post-deploy.
Connection pool starvation
Long queries block the pool and requests pile up. A fast-timeout health endpoint surfaces this before ActionCable drops users.
Don't like our status page? Build your own in Ruby on Rails.
Our API returns the same data our hosted UI consumes. Full OpenAPI spec documented at api.pulseapi.tech/docs.
require "net/http"
require "json"
class StatusController < ApplicationController
def show
uri = URI("https://api.pulseapi.tech/status/acme")
@data = JSON.parse(Net::HTTP.get(uri))
end
endRuby on Rails monitoring — FAQ
Does it work with Rails, Sinatra, Hanami, or Padrino?
Yes. Monitoring is HTTP-level — the framework does not matter.
How do I monitor a Sidekiq queue?
Return current queue depth from a controller action and alert above a threshold. PulseAPI supports JSON-path so `$.queue_depth < 100` works.
Does it work with Heroku, Fly.io, and Render?
Yes, and with any deployment. PulseAPI only needs a public URL.
Can I embed the status page inside the Rails app?
Yes. Hit the public API from a controller, render a template, or use a turbo_frame with a server-rendered partial.
Start monitoring your Ruby on Rails app in 5 minutes
Free tier. No credit card. Add your endpoint and get alerts when it breaks.