169 votes

db:schema:load râteau vs les migrations

Question très simple ici - si les migrations pouvez obtenir lente et lourde, comme une application devient de plus en plus complexe et, si nous avons la plus propre rake db:schema:load appeler au lieu de cela, pourquoi ne migrations existent?

Si la réponse à ce qui précède est que les migrations sont utilisés pour le contrôle de version (étapes dossier des changements à la base de données), puis comme une application devient de plus en plus complexe et rake db:schema:load est utilisé de plus au lieu de cela, ils continuent à maintenir leur fonction première?


Attention:

À partir des réponses à cette question: est - rake db:schema:load va supprimer les données sur un serveur de production, donc être prudent lors de son utilisation.

207voto

jesse reiss Points 2555

Les Migrations de fournir de l'avant et pas en arrière de changements à la base de données. Dans un environnement de production, ce changement doit être à la base de données pendant déploie: les migrations de fournir cette fonctionnalité avec une restauration failsafe. Si vous exécutez rake db:schéma:charge sur un serveur de production, vous finirez par la suppression de toutes vos données de production. C'est une dangereuse habitude à prendre.

Cela étant dit, je crois qu'il s'agit d'une bonne pratique de temps en temps de "l'effondrement" des migrations. Cela implique de supprimer les anciennes migrations, en les remplaçant par une seule migration (très similaire à votre schéma.rb fichier) et la mise à jour de la "schema_migrations" table afin de refléter ce changement. ÊTRE TRÈS PRUDENT LORSQUE VOUS FAITES CELA! Vous pouvez très facilement supprimer les données de votre production si vous n'êtes pas prudent.

Comme une note de côté, je crois fermement que vous ne devriez jamais mettre de la création de données dans les fichiers de migration. La graine.rb fichier peut être utilisé pour cela, ou de la coutume de râteau ou de déployer des tâches. La concrétisation de la migration des fichiers de mélanges à votre schéma de base de données de spécification avec vos données de spécification et peut mener à des conflits lors de l'exécution de fichiers de migration.

30voto

ereslibre Points 129

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 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 à 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.

9voto

Shaunak Points 3769

Migrations vous permet également d'ajouter des données à la base de données. mais db: schema: load ne charge que le schéma.

6voto

Jamie Penney Points 2821

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.

4voto

Dan James Points 31

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 base de données 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X