2009-06-17 4 views
1

J'ai un bug dans un "self.drop" dans une migration telle que je ne peux pas revenir en arrière après cette migration. comment puis-je commencer à partir de zéro et construire à partir de la migration 001? aussi, est-il un moyen de le faire sans perdre mes données (il vient de tester, mais quand même ...)comment éviter une migration de rollback défectueuse dans ruby?

+0

Cela dépend de la manière dont vous avez modifié la base de données dans cette migration. Ajouté quelque chose? Supprimé quelque chose? Pouvez-vous fournir plus d'informations? –

Répondre

1
rake db:drop 
rake db:create 
rake db:migrate 

Il réinitialise votre base de données et exécuter toutes les migrations. Si vous ne voulez pas perdre vos données, vous pouvez l'enregistrer en utilisant le plugin yaml_db:

rake db:data:dump # stores all data in db/data.yml 
... 
rake db:data:load # loads db/data.yml to database 

Si vous avez une erreur dans une migration, vous pouvez le modifier puis essayer de rollback.

1

Vous pouvez commenter toutes les instructions dans la migration Self.Down et revenir à la version précédente de la base de données.

Ensuite, appliquez les modifications manuellement en utilisant un client gui/web db pour faire correspondre le schéma db avant la migration. Après que vous serez en mesure d'exécuter à nouveau la migration et vos données ne seront pas perdues.

0

Je me rends compte que c'est une vieille question, mais je suis toujours d'actualité. Si vous voulez recréer votre base de données à partir de zéro, on ne rollback pas et la migration reprise, on fait juste

rake db:setup 

Cela va supprimer, créer et remplir la base de données avec l'état combiné actuel de toutes les migrations. C'est parce que, certainement dans un grand système, l'exécution de toutes les migrations pourrait ne plus fonctionner. Cependant, exécuter le schema.rb fonctionnera toujours. Mon conseil serait aussi d'éviter autant que possible l'annulation des migrations, sauf si vous venez de créer une migration et que vous voulez faire une addition/typo/fix, avant d'avoir poussé la migration vers votre équipe ou tout déploiement.

Questions connexes