Rastrea despliegues con Rails.app.revision
Rails 8.2 introduce Rails.app.revision, una adición simple pero poderosa para rastrear qué versión de tu código está ejecutándose en producción. Si alguna vez has añadido código personalizado para rastrear commits de git para reportes de errores o claves de caché, esto ahora está integrado.
Qué Cambió
Un nuevo método Rails.app.revision devuelve el identificador del despliegue actual. Por defecto, Rails lo busca en dos lugares:
- Un archivo
REVISIONen la raíz de tu aplicación (comúnmente creado por herramientas de despliegue como Capistrano) - El SHA del commit actual de git si no existe archivo REVISION
Rails.app.revision
# => "3d31d593e6cf0f82fa9bd0338b635af2f30d627b"
Por Qué Esto Importa
Saber exactamente qué código está ejecutándose ayuda con:
- Reportes de errores: Adjunta la revisión a excepciones para poder rastrear bugs a commits específicos
- Verificación de despliegues: Confirma que tu último despliegue realmente se aplicó
- Invalidación de caché: Incluye la revisión en claves de caché para invalidar cachés en despliegue
- Dashboards de monitoreo: Rastrea métricas de rendimiento por despliegue
Antes de este cambio, escribirías algo como:
# config/initializers/revision.rb
REVISION = if File.exist?(Rails.root.join("REVISION"))
File.read(Rails.root.join("REVISION")).strip
else
`git rev-parse HEAD`.strip
end
Ahora es simplemente Rails.app.revision.
Cómo Usarlo
Comportamiento por defecto
Si despliegas con Capistrano o herramientas similares que crean un archivo REVISION, simplemente funciona:
Rails.app.revision # lee del archivo REVISION
Si estás en un repositorio git sin archivo REVISION:
Rails.app.revision # devuelve el SHA actual de git
Configuración personalizada
Configúralo explícitamente en config/application.rb:
module MyApp
class Application < Rails::Application
# Desde variable de entorno (común en despliegues containerizados)
config.revision = ENV["GIT_SHA"]
# O desde un proc para evaluación diferida
config.revision = -> { File.read("BUILD_ID").strip }
end
end
Integración con reportes de errores
La revisión se añade automáticamente al contexto del reporter de errores:
Rails.error.report(exception)
# El contexto ahora incluye:
# {
# rails: {
# version: "8.2.0",
# app_revision: "abc123...",
# environment: "production"
# }
# }
En claves de caché
def cache_key
"my_data/#{Rails.app.revision}/#{id}"
end
Cosas a Tener en Cuenta
- Devuelve
nilsi no existe archivo REVISION y no estás en un repositorio git - El fallback de git solo funciona si el directorio
.gitestá presente (algunas builds de Docker lo excluyen) - Para despliegues containerizados, prefiere configurar
config.revision = ENV["GIT_SHA"]explícitamente
Conclusión
Rails.app.revision es una pequeña mejora de calidad de vida que estandariza un patrón común. Si ya estás rastreando revisiones manualmente, ahora puedes eliminar ese código y usar el método integrado.
Consulta el commit y PR #56490 para detalles de implementación.