Suivez les déploiements avec Rails.app.revision

Rails 8.2 introduit Rails.app.revision, un ajout simple mais puissant pour suivre quelle version de votre code s’exécute en production. Si vous avez déjà ajouté du code personnalisé pour suivre les commits git pour les rapports d’erreurs ou les clés de cache, c’est maintenant intégré.

Ce Qui a Changé

Une nouvelle méthode Rails.app.revision retourne l’identifiant du déploiement actuel. Par défaut, Rails le cherche à deux endroits :

  1. Un fichier REVISION à la racine de votre application (couramment créé par des outils de déploiement comme Capistrano)
  2. Le SHA du commit git actuel si aucun fichier REVISION n’existe
Rails.app.revision
# => "3d31d593e6cf0f82fa9bd0338b635af2f30d627b"

Pourquoi C’est Important

Savoir exactement quel code s’exécute aide pour :

  • Rapports d’erreurs : Attachez la révision aux exceptions pour tracer les bugs à des commits spécifiques
  • Vérification de déploiement : Confirmez que votre dernier déploiement s’est vraiment appliqué
  • Invalidation de cache : Incluez la révision dans les clés de cache pour invalider les caches au déploiement
  • Tableaux de bord de monitoring : Suivez les métriques de performance par déploiement

Avant ce changement, vous écriviez quelque chose comme :

# 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

Maintenant c’est juste Rails.app.revision.

Comment l’Utiliser

Comportement par défaut

Si vous déployez avec Capistrano ou des outils similaires qui créent un fichier REVISION, ça fonctionne directement :

Rails.app.revision # lit depuis le fichier REVISION

Si vous êtes dans un dépôt git sans fichier REVISION :

Rails.app.revision # retourne le SHA git actuel

Configuration personnalisée

Définissez-le explicitement dans config/application.rb :

module MyApp
  class Application < Rails::Application
    # Depuis une variable d'environnement (courant dans les déploiements conteneurisés)
    config.revision = ENV["GIT_SHA"]

    # Ou depuis un proc pour une évaluation paresseuse
    config.revision = -> { File.read("BUILD_ID").strip }
  end
end

Intégration avec les rapports d’erreurs

La révision est automatiquement ajoutée au contexte du reporter d’erreurs :

Rails.error.report(exception)
# Le contexte inclut maintenant :
# {
#   rails: {
#     version: "8.2.0",
#     app_revision: "abc123...",
#     environment: "production"
#   }
# }

Dans les clés de cache

def cache_key
  "my_data/#{Rails.app.revision}/#{id}"
end

Points d’Attention

  • Retourne nil si aucun fichier REVISION n’existe et que vous n’êtes pas dans un dépôt git
  • Le fallback git ne fonctionne que si le répertoire .git est présent (certains builds Docker l’excluent)
  • Pour les déploiements conteneurisés, préférez définir config.revision = ENV["GIT_SHA"] explicitement

Conclusion

Rails.app.revision est une petite amélioration de qualité de vie qui standardise un pattern courant. Si vous suivez déjà les révisions manuellement, vous pouvez maintenant supprimer ce code et utiliser la méthode intégrée.

Consultez le commit et PR #56490 pour les détails d’implémentation.