Rails 8 made Solid Queue the default Active Job backend, and it's excellent: database-backed, no Redis, and Mission Control Jobs gives you a dashboard. But there's a gap nobody talks about: nothing tells you when things break. Mission Control is a window you have to remember to look through. It has no alerting and no historical metrics. In practice that means one of two things happens: You find out your jobs have been failing for three days when a customer emails you, or You bolt on Datadog/New Relic — a heavyweight APM subscription to answer "did my background jobs fail?" For small and mid-size Rails apps, neither is great. So I built QueuePulse. What it does QueuePulse reads Solid Queue's existing tables — read-only, no migration, no extra service, no agent process — and notifies you the moment one of five things happens: Check Fires when 🔴 Job failures a job lands in failed_executions 🟠 Queue latency the oldest ready job has waited past your threshold 🟠 Queue depth a queue backs up beyond N jobs 🟠 Stuck jobs a job has been "running" far longer than it should 🔴 Dead workers no worker/dispatcher heartbeat — nothing is processing Alerts go to Slack, email, or any webhook. Setup (2 minutes) # Gemfile gem "queue_pulse" Enter fullscreen mode Exit fullscreen mode # config/initializers/queue_pulse.rb QueuePulse.configure do |config| config.add_notifier QueuePulse::Notifiers::Slack.new(webhook_url: ENV["SLACK_WEBHOOK_URL"]) end Enter fullscreen mode Exit fullscreen mode Then schedule the check with Solid Queue's own recurring tasks: # config/recurring.yml queue_pulse_check: class: QueuePulse::CheckJob schedule: every minute Enter fullscreen mode Exit fullscreen mode That's it. Every setting (thresholds, cooldowns) has a sensible default you can override. Design principles No new infrastructure. It piggybacks on tables you already have. Dedupe state lives in Rails.cache. Safe by default. Read-only queries; every check and notifier is exception-isolated, so QueuePulse can never take down your app. Raw job arguments are never sent unless you opt in. Quiet. Cooldowns + burst-collapsing (one alert for 500 identical failures, not 500 alerts). It's free MIT-licensed, on RubyGems. A hosted dashboard with historical metrics is on the roadmap (waitlist here), but the gem is and stays open source. If you run Solid Queue in production I'd genuinely love feedback — what would you want alerted on that's missing? Issues and PRs welcome: https://github.com/michiya-59/queue_pulse
Solid Queue has no alerting, so I built QueuePulse
Full Article
Original Source
Read the full article at Dev →KhanList aggregates and links to publicly available news content. We do not host full articles from third-party sources. Always verify important information with original sources.