2009-07-29 5 views
1

私はRailsの開発者ではありません(現在)ので、私の知らないことを許してください。Rails 2.1以降ではどのように移行スクリプトが適用されますか?

私がいつも気に入ってきたことの1つは、移行とそれがすべての言語とプラットフォームで共通のニーズを満たす方法です。それで、私は、2.1で行った変更に何らかのシナリオがどのような結果をもたらすのかを理解するのが好奇心です。

Rails 2.1以降では、移行ロジックに2つの変更を加えました。最初は、ソース管理にファイルを追加する前に、2人の開発者が同じファイルで同時に作業する確率を減らすために、生成時にタイムスタンプベースのスクリプト名を使用することでした。したがって、002_test.rbの代わりに、スクリプトが生成されると20090729123456_test.rbになります。

2番目の項目は、Schema_Infoテーブルが、最新のバージョン番号だけでなく、移行リストを提示したSchema_Migrationsテーブルに置き換えられたことです。

Railsソースを調べると、Schema_Migrationテーブルにある最大バージョンとしてスキーマの「最新バージョン」が使用されていることがわかりました。

ここで私が把握しようとしているシナリオです:

開発者Aは、新しいスクリプトを生成します。20090729120000_test.rb。

開発者Bは、新しいスクリプト:20090729130000_test.rbを生成します。

開発者Bは、バージョン番号を指定せず、開発者Aのスクリプトがまだ追加されていないと仮定して、スクリプトをデータベースに移行します。

Developer Aがスクリプトを追加し、スクリプトバージョン(タイムスタンプに基づく)が現在適用されているバージョンよりも小さいため、最新のバージョンに移行しようとするとどうなりますか?

答えて

1

私は肯定的ではありませんが、デベロッパーBの移行を元に戻すには「rake db:rollback」を実行してから、「rake db:migrate」を実行して、 。もちろん、2人の開発者が相互に統合する必要のないテーブルで独立して作業している場合(この例のように、開発者Bが開発者Aの移行を待つ必要がないため)、開発者Aは開発者Bの移行のタイムスタンプとなり、再び適切な順序になります。

0

短い答えは:心配しないでください。

rake db:migrateは、schema_migrationsテーブルに見つからない移行を実行しようとします。既に実行された新しい移行があるかどうかは関係ありません。

BがAに依存していて、その順序で実行する必要がある場合は、問題が発生する可能性がありますが、それは開発者間の問題です。

関連する問題