2009-04-01 9 views
15

Une application rails que je développe actuellement a environ 35 migrations jusqu'à ce point. Depuis que l'application a commencé comme une expérience, il ya une bonne quantité de désabonnement sans signification dans les migrations que je suis allé en arrière entre différentes idées.Est-ce une bonne idée d'écrouler les anciennes migrations de rails?

Y a-t-il des inconvénients à réduire les migrations 1 à 35 en une seule migration? Je prévoyais de le faire en demandant à la première migration de charger le schéma tel qu'il est actuellement et en supprimant toutes les migrations précédentes. Je suis actuellement la seule personne à travailler sur ce projet, si cela fait une différence.

Répondre

11

Si vous avez votre code sous contrôle de code source (vous faire ont votre code sous contrôle de code source, ne vous ?) alors je dirais qu'il n'y a pas vraiment de mal, à condition que vous acceptiez que les changements de schémas de rétrogradation exigent la restauration d'anciennes migrations ou de nouvelles migrations. Assurez-vous simplement de comprendre les implications et acceptez-les avant de poser quoi que ce soit dans la pierre. Votre schéma.rb actuel peut former la base d'une nouvelle migration unique qui démarrera un nouvel ensemble. Soyez averti que si vous avez des opérations de manipulation de données dans vos migrations existantes, des chargements de données statiques, par exemple, et/ou des transformations ultérieures possibles, elles devront être gérées quelque part. C'est quelque chose que j'ai trébuché plusieurs fois ...

5

Je voudrais les garder autour. Ne vous inquiétez pas d'avoir à faire beaucoup de migrations chaque fois qu'un nouveau développeur vérifie le projet. Il peut toujours courir

rake db:schema:load 

qui est beaucoup plus rapide, au lieu de courir

rake db:migrate 
2

Si toutes vos migrations sont de modifier vos structures de table, je ne m'inquiéterais pas de tout cela. Gardez à l'esprit que certaines migrations ajoutent des données - j'en ai une qui ensemence la base de données avec un compte admin et d'autres données fixes - et le schéma ne vous le donnera pas.

Considérez que c'est une mauvaise idée de faire ce que je fais avec les migrations puisque je n'utilise pas les migrations en déploiement. Ainsi, l'effondrement des migrations peut être une bonne idée pour déplacer ces migrations de données vers des tâches de rake.

Après examen - Je me fais l'écho des points déjà fait. rake db:migrate VERSION -1

[Je blâme le distrayant nouveau logo animé pour avoir attiré mon oeil loin du texte]

5

Parfois, les migrations peuvent utiliser des modèles qui n'existent plus ou de créer des tables, puis plus tard les détruire, de perdre du temps CPU précieux. Le mieux est de compiler tout en db/schema.rb et obtenir vos développeurs d'exécuter rake db:schema:load

-1

Pour ceux qui, comme moi, a trouvé cette réponse à la recherche d'un moyen de réinitialiser une application à son état d'origine , voici ce qu'il faut faire:

rm db/migrations/* 
rake db:drop 
rake db:schmea:dump 

Ceci est utile si vous venez de commencer une application et décidé que vous voulez reconstruire à partir de zéro sans perdre tous vos fichiers.

1

Aucun dommage, et la réduction des migrations est une bonne pratique et aide les performances lorsque des migrations doivent être exécutées. Ce fait maintenant partie de schema.rb Rails:

# 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). 

Remarque que @ micro-Woodhouse dit: « Il faut savoir que si vous avez des opérations de manipulation de données dans vos migrations existantes, les charges de données statiques, par exemple, et/ou des transformations ultérieures possibles, alors celles-ci devront être manipulées quelque part. "

Mais vous ne devriez pas faire cela de toute façon dans vos migrations :) - Tchad

Questions connexes