fc2ブログ

2023.08 «  - - - - - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 » 2023.10
TOP > Rails 2.1・その4(db migration ファイルのバージョンがUTC日付に)

 ← Rails 2.1・その5(model の値変更を覚えている) | TOP | Rails 2.1・その3(number_to_currency でフォーマットを指定)

Rails 2.1・その4(db migration ファイルのバージョンがUTC日付に) 

2008年05月27日 ()
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.1
What's New in Edge Rails: UTC-based Migration Versioning

【広告】

[2008.05.27(Tue) 11:38] [2.1]active_recordTrackback(0) | Comments(0)
↑TOPへ

 ← Rails 2.1・その5(model の値変更を覚えている) | TOP | Rails 2.1・その3(number_to_currency でフォーマットを指定)

COMMENT

COMMENT POST















管理者にだけ表示

 ← Rails 2.1・その5(model の値変更を覚えている) | TOP | Rails 2.1・その3(number_to_currency でフォーマットを指定)