Question très simple ici - si les migrations peuvent devenir lentes et fastidieuses à mesure qu'une application devient plus complexe et si nous avons le plus propre rake db:schema:load
à appeler à la place, 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 (un enregistrement pas à pas des modifications apportées à la base de données), alors qu'une application devient plus complexe et rake db:schema:load
est davantage utilisée à la place, continuent-elles à conserver leur fonction principale?
Mise en garde:
D'après les réponses à cette question: rake db:schema:load
supprimera les données sur un serveur de production donc soyez prudent lors de son utilisation.
ruby-on-rails
ruby-on-rails-3
migration
sscirrus
la source
la source
Réponses:
Les migrations fournissent des modifications par étapes avant et arrière à la base de données. Dans un environnement de production, des modifications incrémentielles doivent être apportées à la base de données lors des déploiements: les migrations fournissent cette fonctionnalité avec une sécurité de retour arrière. 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 à prendre.Cela étant dit, je pense que c'est une pratique décente de «faire échouer» occasionnellement les migrations. Cela implique de supprimer les anciennes migrations, de les remplacer par une seule migration (très similaire à votre
schema.rb
fichier) et de mettre à jour leschema_migrations
tableau pour refléter ce changement. Soyez très prudent en faisant cela! Vous pouvez 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
seed.rb
fichier peut être utilisé pour cela, ou pour des tâches de râteau ou de déploiement personnalisées. Le placer dans des fichiers de migration associe la spécification de votre schéma de base de données à vos spécifications de données et peut entraîner des conflits lors de l'exécution des fichiers de migration.la source
db:schema:load
s'ils essaient de s'exécuterdb:migrate
sur une nouvelle installation. @ clear_migrationsJe suis tombé sur ce post, il y a longtemps et je n'ai pas vu la réponse que j'attendais.
rake db:schema:load
est idéal pour la première fois que vous mettez un système en production. Après cela, vous devez exécuter les migrations normalement.Cela vous aide également à nettoyer vos migrations quand vous le souhaitez, car le schéma contient toutes les informations pour mettre d'autres machines en production, même lorsque vous avez nettoyé vos migrations.
la source
db:schema:load
autre que de se raser quelques secondes une fois tout au long du cycle de développement. Avez-vous déjà travaillé avec une application dont la création a pris plus de 30 secondes? Je travaille actuellement sur une application qui a des bogues dans ses fichiers de migration et elle ne migrera jamais sans avoir de corrections de bogues ou en cours d'exécution,db:schema:load
ce qui me fait penser au schéma: la charge est pour quand quelque chose a mal tourné concernant le développement de l'application.instead of editing schema.rb, please use the migrations feature
. Ainsi, si vous exécutezdb:schema:load
sur un fichier généré automatiquement que vous n'avez pas de migrations à générer automatiquement à nouveau, vous vous engagez dans la voie de la "modification" manuelle du schéma et de la suppression des migrations. J'aurais aimé avoir une citation du guide des rails à ce sujet, mais ils ne parlent pas de schema: load, ce qui ajoute à ma frustration en décidant comment aborder le schéma: load feature. = /rake db:schema:load
plutôt querake db:migrate
. Ensuite, à partir de là, vous pouvezrake db:migrate
.Les migrations vous permettent également d'ajouter des données à la base de données. mais db: schema: load ne charge que le schéma.
la source
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.
la source
En tant qu'utilisateur d'autres ORM, il m'a toujours semblé étrange que Rails n'ait pas de fonction de synchronisation et de mise à jour. c'est-à-dire, en utilisant le fichier de schéma (qui représente le schéma entier et à jour), parcourez la structure de base de données existante et ajoutez / supprimez des tables, des colonnes et des index selon les besoins.
Pour moi, ce serait beaucoup plus robuste, même si peut-être un peu plus lent.
la source
schema
s'agit du maître et non des migrations.J'ai déjà publié un commentaire, mais je pense qu'il est préférable de mettre les commentaires du fichier db / schema.rb ici:
En fait, mon expérience est qu'il est préférable de mettre les fichiers de migration dans git et non dans le fichier schema.rb ...
la source
rake db:migrate
configurer les tables de la base de données. Lorsque vous exécutez la commande de migration, elle cherchera dans db / migrate / tous les fichiers ruby et les exécutera en commençant par le plus ancien. Il y a un horodatage au début de chaque nom de fichier de migration.Contrairement à
rake db:migrate
cela, exécute les migrations qui ne sont pas encore exécutées,rake db:schema:load
charge le schéma déjà générédb/schema.rb
dans la base de données.Vous pouvez en savoir plus sur les commandes de la base de données rake ici .
la source