Rails: que fait schema.rb?

J’avais l’habitude de penser que db/schema.rb dans un projet Rails stockait le schéma de firebase database, de sorte ActiveRecord puisse savoir quelle table / colonne il possède.

Mais plus tôt, j’ai remarqué avec surprise que mon projet s’exécutait normalement après avoir supprimé db/schema.rb !

Donc, puisque les Rails peuvent fonctionner sans elle, que fait schema.rb ?

Le schema.rb principalement deux objectives:

  1. Il documente l’état actuel final du schéma de firebase database. Souvent, surtout lorsque vous effectuez plusieurs migrations, il est difficile de déduire le schéma des seules migrations. Avec un schema.rb actuel, vous pouvez simplement y jeter un coup d’oeil. ActiveRecord lui-même ne l’utilisera pas. Il va inspecter la firebase database lors de l’exécution car cela est beaucoup plus sûr que d’attendre des utilisateurs qu’ils maintiennent schema.rb à jour. Cependant, pour éviter toute confusion chez vos développeurs, vous devez toujours conserver un fichier à jour avec vos migrations.

  2. Il est utilisé par les tests pour remplir le schéma de firebase database. En tant que tel, rake db:schema:dump est souvent exécuté dans le cadre du test:prepare rake test:prepare run. Le but est que le schéma de la firebase database de test corresponde exactement à la firebase database de développement en cours.

Documentation Rails / 6.1 Que sont les fichiers de schéma?

Les migrations, si puissantes soient-elles, ne sont pas la source faisant autorité pour votre schéma de firebase database. Ce rôle revient à db / schema.rb ou à un fichier SQL généré par Active Record en examinant la firebase database. Ils ne sont pas conçus pour être édités, ils représentent simplement l’état actuel de la firebase database.

Il n’est pas nécessaire (et il est sujet aux erreurs) de déployer une nouvelle instance d’une application en réexécutant l’historique complet de la migration. Il est beaucoup plus simple et rapide de charger dans la firebase database une description du schéma actuel.

Par exemple, voici comment la firebase database de test est créée: la firebase database de développement actuelle est sauvegardée (soit dans db / schema.rb ou db / structure.sql), puis chargée dans la firebase database de test.

Les fichiers de schéma sont également utiles si vous souhaitez examiner rapidement les atsortingbuts d’un object Active Record. Ces informations ne figurent pas dans le code du modèle et sont fréquemment réparties sur plusieurs migrations, mais les informations sont bien résumées dans le fichier de schéma. La gem annotate_models ajoute et met à jour automatiquement les commentaires en haut de chaque modèle résumant le schéma si vous souhaitez cette fonctionnalité.

Les documents Rails vous ont couvert.