class HealthController < ActionController::API
def show
checks = {
db: db_ok?,
redis: redis_ok?
}
status = checks.values.all? ? 200 : 503
render status: status, json: checks.merge(time: Time.current.iso8601)
end
private
def db_ok?
ApplicationRecord.connection.select_value('SELECT 1') == 1
rescue StandardError
false
end
def redis_ok?
Redis.current.ping == 'PONG'
rescue StandardError
false
end
end
A real health check tests the dependencies you care about (DB, Redis). Keep it fast and don’t make it do expensive queries. Use it for load balancers and alerts.