2009-06-17 10 views
1

マイグレーション中に「self.drop」にバグがあり、そのマイグレーションを元に戻すことができません。どのように私はゼロから始めて、移行001から構築できますか?また、ruby​​でのロールバック移行の失敗を避けるには?

+0

これは、その移行でデータベースをどのように変更したかによって異なります。何かを加えましたか?削除されたものはありますか?より多くの情報を提供できますか? –

答えて

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

は、それはあなたのデータベースをリセットし、すべてのマイグレーションを実行します(まだ...それだけでテストしていますが、)私のデータを失うことなくこれを行う方法があります。あなたのデータを失いたくない場合は、プラグインyaml_dbを使用して、それを保存することができます:

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

あなたは、移行中にエラーが発生している場合は、それを編集して、ロールバックしようとすることができます。

1

self.downマイグレーション中のすべてのステートメントをコメントにして、前のdbバージョンにロールバックできます。

次に、移行前にgui/web dbクライアントを使用して手動で変更を適用してdbスキーマを照合します。

移行をもう一度実行すると、データが失われることはありません。

0

私はこれが古い質問であることを認識していますが、まだ関連しています。あなたが最初からデータベースを再作成する場合、1はロールバックして再実行し、移行しない、人はちょうど

rake db:setup 

これは、ドロップ作成し、すべてのマイグレーションの現在の結合状態でデータベースを記入しますありません。これは、間違いなく大規模なシステムでは、すべての移行を実行できなくなる可能性があるためです。ただし、schema.rbを実行すると常に動作します。

マイグレーションを作成したばかりで、マイグレーションをチームや配備にプッシュする前に、いくつかの追加/入力ミスを修正したい場合を除いて、可能な限りマイグレーションのロールバックを避けることもお勧めします。

関連する問題