2012-02-10 4 views
5

Rails 1.2.3アプリを3.2.1にアップデートしました。Rails 1.2.3アプリからアップグレードする際の移行方法を教えてください。

私は、Railsの最新バージョンと互換性があるように移行構造を更新する方法を理解しようとしています。そのため、アプリケーションを設定するときにはrake db:migrateを実行するのが理想的です。現在のところ、私は実行する必要があるすべての移行のrake db:migrate:up VERSION=[version_number]を行うだけでこれを解決しました。私がちょうどrake db:migrateを実行すると、最初からすべての移行を再実行しようとしますが、それらの移行はすでに持っているDBのダンプで実行されているため、停止します。

001_add_some_model.rb,002_add_some_other_model.rbのようなアプリの移行は、20120209182512_add_some_model.rbの代わりになります。

誰もこの経験がありますか?これをどうすれば解決できますか?

+6

ワウ1.2.3から3.2.1。幸運... – lucapette

+0

@lucapetteありがとう!これはかなり完了しています。マイグレーションをより自然に実行したいだけです。 – jfedick

+0

私が目にしてきた解決策は、「移行を中止し、新しいものを出発点として作成する」ことです。 – lucapette

答えて

7

マイグレーションマイグレーションを再開して、マイグレーションをすべて削除し、現在のモデルの定義で新しいマイグレーションを作成してください。開始例としてthis migrationを参照してください。

2

すべての移行を実行して、最新のRails 3アプリケーションでも新しいデータベースを設定することはお勧めしません。これはdb/schema.rbで説明されています。

このschema.rb定義は、 データベーススキーマの信頼できるソースです。他の システム上にアプリケーションデータベースを作成する必要がある場合は、すべての移行を最初から実行しないでdb:schema:loadを使用する必要があります。後者は欠陥があり、持続不可能なアプローチです(より多くの移行が増えるほど、実行速度は遅くなり、問題の可能性も高くなります)。

0

代わりに、私は最初から新しい移行を作成します。 現在のすべてのモデルを現在の状態から始め、それぞれのモデルに対して新しい移行を作成します。これにより、テーブルに列を追加したり、列の種類を変更したりするなど、移行の力を引き続き使用できます。

すべてのモデルに対して単一移行を作成する場合は、like has been suggestedをマイグレーション名のモデルトラックに入れます。

これはこれを行うためのもう1つの方法であり、自分のビジョンを反映しています。

関連する問題