マイグレーション(migrate)の利用法とバージョン管理
mysqlにアクセスすると、giftテーブルへのカラム追加、orderテーブルの生成がされていることが確認できます。
rake db:migrate コマンドを実行すると、002,003のself.upメソッドが実行されました。このように一番大きな数字のファイルまですべて実行します。
逆に以下のコマンドを実行してみましょう。
上記のページを参考にやった見ました。ただ、最近のRailsでは001とかの連番ではなくなり日付と時刻(たぶん世界標準時刻)になったみたいです。
次のように実行した見たところ、MySQLも変更されていました。
migrateの実行
u8w@u8w-desktop:~/Rails/dbtest$ ls db/migrate/ 20090817174423_create_gifts.rb 20090817181649_add_column_note.rb u8w@u8w-desktop:~/Rails/dbtest$ rake db:migrate VERSION=20090817174423 (in /home/u8w/Rails/dbtest) == AddColumnNote: reverting ================================================== -- remove_column(:gifts, :note) -> 0.0083s == AddColumnNote: reverted (0.0088s) ========================================= u8w@u8w-desktop:~/Rails/dbtest$
MySQLで確認
mysql> desc gifts; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | category | varchar(255) | NO | | NULL | | | name | varchar(50) | YES | | NULL | | | price | int(11) | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | | note | varchar(255) | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+ 7 rows in set (0.01 sec) mysql> desc gifts; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | category | varchar(255) | NO | | NULL | | | name | varchar(50) | YES | | NULL | | | price | int(11) | YES | | NULL | | | created_at | datetime | YES | | NULL | | | updated_at | datetime | YES | | NULL | | +------------+--------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql>
初回作成
u8w@u8w-desktop:~/Rails/dbtest$ cat db/migrate/20090817174423_create_gifts.rb class CreateGifts < ActiveRecord::Migration def self.up create_table :gifts do |t| t.string :category,:null=>false t.string :name,:limit=>50 t.integer :price t.timestamps end end def self.down drop_table :gifts end end u8w@u8w-desktop:~/Rails/dbtest$
変更(カラムを追加)
u8w@u8w-desktop:~/Rails/dbtest$ cat db/migrate/20090817181649_add_column_note.rb class AddColumnNote < ActiveRecord::Migration def self.up add_column :gifts,:note,:string end def self.down remove_column :gifts,:note end end u8w@u8w-desktop:~/Rails/dbtest$
設定ファイルを追加したコマンド
ruby script/generate migration add_column_note
初めは馴染みにくいというか、migrateの仕組みがよくわかりませんでしたが、わかれば結構単純で、確かに便利です。