Special Thanks to
a_matsudaさん-------------------------------------------
db migration ファイルの名前が 001_chomechome.rb から 20080224235011_chomechome.rb になりました。
連番から、年月日時分秒(UTC)にバージョン番号が変わったという訳ですね。
これに伴い、db のテーブル名も、schema_info から schema_migrations に変わりました。
このテーブルのカラムも version(INT) から version(VARCHAR 255) に変わりました。
テーブルに入るデータも、schema_info の時は 1 行だけでしたけど、schema_migrations は、migrate したファイルの数だけの行数を保持します。
つまーり、db/migrate ディレクトリの中のファイルが、
20080224235011_chomechome_one.rb
20080224235012_chomechome_two.rb
20080224235013_chomechome_three.rb
だったとすると、
rake db:migrate
をして、schema_migrations テーブルに入るデータは、
20080224235011
20080224235012
20080224235013
の 3 行になります。
この変更、複数人で違う機能を平行して開発している時とか、1人で開発しているけどブランチ(食事のことではない)ありまくりの時とかに、えーと次のバージョン番号なんだっけ?と隣の人に聞いたりプロジェクト内で調整を計ったりしなくてもよくなりました。わーい
例で言いますと、db/migrate ディレクトリの中のファイルが、
20080224000000_chomechome_one.rb
20080224111111_honyarara_one.rb
20080224222222_chomechome_two.rb
20080224333333_chomechome_three.rb
だったとして、そして、schema_migrations テーブルに入っているデータが
20080224000000
20080224222222
20080224333333
だったとします。この時
rake db:migrate
をすると、20080224111111_honyarara_one.rb の分が実行されます。
さて、ここで注意しなければならないのが、こちらの migration ファイル 4 つを、テスト環境や本番環境へ持っていくときには、この順番↓で実行されますが、
20080224000000_chomechome_one.rb
20080224111111_honyarara_one.rb
20080224222222_chomechome_two.rb
20080224333333_chomechome_three.rb
20080224111111_honyarara_one.rb ファイルの中で、その後に続くファイル 20080224222222_chomechome_two.rb や 20080224333333_chomechome_three.rb の処理とのコンフリクトを起こしてはいかんよ、ということですね。
たとえば、↓の例はいけません
20080224111111_honyarara_one.rb
class HonyararaOne < ActiveRecord::Migration
def self.up
change_table :people do |t|
t.rename :gender, :sex # ここで gender から sex にカラム名を変えてしまった
end
end
def self.down
change_table :people do |t|
t.rename :sex, :gender
end
end
end
20080224222222_chomechome_two.rb
class ChomechomeTwo < ActiveRecord::Migration
def self.up
change_table :people do |t|
t.change :gender, :string # もう gender というカラム名は存在しない
end
end
def self.down
t.change :gender, :integer
end
end
という訳で終了。ちょりーす
参考ブログ
Migrations in Rails 2.1What's New in Edge Rails: UTC-based Migration Versioning
【広告】