Ruby on Rails

Страница статуса и мониторинг uptime для приложений Rails

Мониторинг Rails-контроллеров, Active Record, очередей Sidekiq и Redis. Красивая хостед-страница или своя через API.

Три способа запустить страницу статуса для Ruby on Rails

Выберите нужный уровень контроля — zero-code, low-code или полный headless.

Хостед

Добавьте Ruby on Rails-эндпоинт, направьте CNAME на status.yourdomain.com — готово. 5 минут.

Headless

Через публичный API собрать свою UI прямо в Ruby on Rails-приложении. Полный контроль дизайна и брендинга.

Смотреть API

Встраиваемые бейджи

SVG-бейджи uptime и статуса в README или лендинг. Обновляются каждые 5 минут.

Вставьте этот health endpoint в своё Ruby on Rails-приложение

Скопируйте, вставьте, направьте PulseAPI на URL. 200 — здоров, 503 — деградация.

app/controllers/health_controller.rb
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
end

Подключайте `get "/health", to: "health#show"` в routes.rb. Пропускайте CSRF, авторизацию и middleware, отдающий 401.

Что ломается в Ruby on Rails-приложениях и как это поймать

Тихо растущие очереди Sidekiq

Застрявший воркер раздувает очередь, пока приложение работает. Эндпоинт глубины очереди + ассершн под порогом.

Регрессии N+1

Забытый .includes() в PR может увеличить время ответа в 10 раз. Ассершн ловит это в первую минуту после деплоя.

Истощение пула соединений

Долгие запросы блокируют пул, запросы копятся. Health с коротким таймаутом ловит это до потери ActionCable-юзеров.

Headless-угол

Не нравится наша страница статуса? Соберите свою на Ruby on Rails.

Наш API отдаёт те же данные, что потребляет наша хостед-UI. Полная OpenAPI-спека на api.pulseapi.tech/docs.

app/controllers/status_controller.rb — собственная UI статуса поверх нашего API.
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
end

Мониторинг Ruby on Rails — FAQ

Работает с Rails, Sinatra, Hanami и Padrino?

Да. Мониторинг на уровне HTTP — фреймворк не важен.

Как мониторить очередь Sidekiq?

Action возвращает глубину очереди, алерт по порогу. PulseAPI поддерживает JSON-path: `$.queue_depth < 100`.

Работает с Heroku, Fly.io и Render?

Да, и с любым деплоем. PulseAPI нужен только публичный URL.

Можно встроить страницу статуса внутрь Rails-приложения?

Да. Запрашивайте публичный API из контроллера, рендерите шаблон, или используйте turbo_frame с server-rendered partial.

Запустите мониторинг Ruby on Rails-приложения за 5 минут

Бесплатный тариф, без карты. Добавьте эндпоинт, получайте алерты о падениях.