2009-09-18 7 views
4

Lorsque le projet prend de l'ampleur, le nombre de migrations commence à être assez élevé et, en rétrospective, je vois de nombreuses migrations qui peuvent être refactorisées. Comme fusionner create_posts et rename_posts_to_responses en create_responses.Refactorisation des migrations de base de données dans Ruby on Rails

Est-ce un mauvais habbit ou devrais-je encourager les migrations de refactoring?

Répondre

5

Vous pourriez mais, plus tard dans le projet, vous ne devriez pas vraiment exécuter les migrations tout le chemin, vous devriez être schema:load, c'est-à-dire, si vous devez démarrer une toute nouvelle instance du projet . Dans mon expérience, vous allez vous causer plus de maux de tête qu'autre chose.

Faire un schema:load est un peu difficile, cependant, si vous avez inclus des données dans vos migrations (ce qui arrive aux meilleurs d'entre nous).

0

J'ai vu de gros projets où toutes les migrations sont remplacées par une migration, tirée de schema.rb. C'est une autre raison de ne pas utiliser les migrations de données et de conserver un ensemble de données de départ.

1

à mon avis, il est correct de factoriser au cours du développement [si je décourageraient il surtout lorsque l'on travaille dans le cadre d'une équipe], mais il est trop facile de gâcher des applications dans la production par les migrations refactoring

5

Une fois que vous vérifier dans une migration au contrôle de la source, je recommande de ne pas les modifier. Je fais une exception rare s'il y a un bug dans un, mais c'est assez rare (1 sur 100 peut-être). La raison en est qu'une fois qu'ils sont dehors dans la nature, certaines personnes peuvent les avoir exécutées. Ils sont enregistrés comme étant complétés dans le db. Si vous les modifiez et enregistrez une nouvelle version, les autres utilisateurs ne bénéficieront pas du changement. Vous pouvez demander aux utilisateurs d'annuler certaines modifications et de les réexécuter, mais cela va à l'encontre du but de l'automatisation. Fait souvent, il devient un gâchis. Il vaut mieux rester seul.

Lorsque vous obtenez un grand nombre de migrations, il peut commencer à se sentir gênant. En général, cependant, vous ne les utiliserez pas beaucoup. Le seul endroit où nous faisons cela est sur notre serveur d'intégration, qui supprime et recrée la base de données à chaque exécution. Donc, vous pouvez simplement ne pas ouvrir ce répertoire et prétendre qu'ils ne sont pas là.

Il existe une pratique de consolidation des migrations. Pour ce faire, copiez simplement le schéma actuel dans une migration et supprimez toutes les migrations précédentes. Vous avez ensuite moins de fichiers à gérer et les tests peuvent être exécutés plus rapidement. Vous devez faire attention à cela, surtout si vous avez des migrations qui s'exécutent automatiquement en production. Je remplace généralement une migration que je sais que tout le monde a exécuté avec le nouveau schéma. D'autres personnes ont des façons légèrement différentes de le faire.

Questions connexes