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