rake db: schema: charge vs migrations

Une question très simple ici – si les migrations peuvent devenir lentes et encombrantes car une application devient plus complexe et si nous avons la rake db:schema:load to call plus propre, pourquoi les migrations existent-elles?

Si la réponse à ce qui précède est que les migrations sont utilisées pour le contrôle de version (enregistrement progressif des modifications apscopes à la firebase database), alors une application devient plus complexe et la rake db:schema:load est plutôt utilisée. fonction primaire?


Mise en garde:

Parmi les réponses à cette question: rake db:schema:load supprime les données sur un serveur de production. Soyez prudent lorsque vous l’utilisez.

Les migrations permettent de modifier la firebase database en amont et en aval. Dans un environnement de production, des modifications incrémentielles doivent être apscopes à la firebase database lors des déploiements: les migrations fournissent cette fonctionnalité avec un retour en arrière sécurisé. Si vous exécutez rake db: schema: load sur un serveur de production, vous finirez par supprimer toutes vos données de production. C’est une habitude dangereuse dans laquelle entrer.

Cela étant dit, je crois que c’est une bonne pratique de «réduire» occasionnellement les migrations. Cela implique la suppression des anciennes migrations, leur remplacement par une seule migration (très similaire à votre fichier schema.rb) et la mise à jour de la table “schema_migrations” pour refléter cette modification. Soyez très prudent lorsque vous faites cela! Vous pouvez très facilement supprimer vos données de production si vous ne faites pas attention.

En passant, je crois fermement que vous ne devriez jamais mettre la création de données dans les fichiers de migration. Le fichier seed.rb peut être utilisé pour cela ou pour des tâches personnalisées de rake ou de déploiement. Le mettre dans des fichiers de migration associe la spécification de schéma de firebase database à votre spécification de données et peut entraîner des conflits lors de l’exécution de fichiers de migration.

Je suis juste tombé par hasard sur ce post, c’était il y a longtemps et je n’ai pas vu la réponse à laquelle je m’attendais.

rake db:schema:load est génial pour la première fois que vous mettez un système en production. Après cela, vous devriez exécuter les migrations normalement.

Cela vous aide également à nettoyer vos migrations à tout moment, car le schéma contient toutes les informations nécessaires pour mettre en production d’autres machines, même lorsque vous avez nettoyé vos migrations.

Migrations vous permet également d’append des données à la firebase database. mais db: schema: load ne charge que le schéma.

Parce que les migrations peuvent être annulées et fournir des fonctionnalités supplémentaires. Par exemple, si vous devez modifier certaines données dans le cadre d’un changement de schéma, vous devrez le faire en tant que migration.

En tant qu’utilisateur d’autres ORM, il m’a toujours semblé étrange que Rails ne soit pas doté d’une fonctionnalité de synchronisation et de mise à jour. Par exemple, en utilisant le fichier de schéma (qui représente l’intégralité du schéma mis à jour), parcourez la structure de firebase database existante et ajoutez / supprimez des tables, des colonnes et des index selon vos besoins.

Pour moi, ce serait beaucoup plus robuste, même si c’est peut-être un peu plus lent.

J’ai déjà posté un commentaire, mais pense qu’il est préférable de mettre les commentaires du fichier db / schema.rb ici:

 # Note that this schema.rb definition is the authoritative source for your # database schema. If you need to create the application database on another # system, you should be using db:schema:load, not running all the migrations # from scratch. The latter is a flawed and unsustainable approach (the more migrations # you'll amass, the slower it'll run and the greater likelihood for issues). # # It's strongly recommended that you check this file into your version control system. 

En fait, mon expérience est qu’il est préférable de placer les fichiers de migration dans git et non dans le fichier schema.rb …

rake db:migrate configurer les tables dans la firebase database. Lorsque vous exécutez la commande de migration, il recherche dans db / migrate / tous les fichiers ruby ​​et les exécute en commençant par le plus ancien. Il existe un horodatage au début de chaque nom de fichier de migration.

Contrairement à la rake db:migrate qui exécute des migrations non encore exécutées, rake db:schema:load charge le schéma déjà généré dans db/schema.rb dans la firebase database.

Vous pouvez en savoir plus sur les commandes de firebase database rake ici .