マイグレーション(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の仕組みがよくわかりませんでしたが、わかれば結構単純で、確かに便利です。
MySQLデータ型のYAML表記
■mysql⇔propel間の変換表
左側がmysqlで右側がpropel(schema.yml)のデータ型(type)表記です。<mysql> <propel>
BIGINT BIGINT
BLOB VARBINARY
BOOL TINYINT
CHAR CHAR
DATE DATE
DATETIME TIMESTAMP
DECIMAL DECIMAL
ENUM CHAR
FLOAT FLOAT
INT INTEGER
INTEGER INTEGER
LONGBLOB VARBINARY
LONGTEXT LONGVARCHAR
MEDIUMBOB VARBINARY
MEDIUMINT SMALLINT
MEDIUMTEXT LONGVARCHAR
SET CHAR
SMALLINT SMALLINT
TEXT LONGVARCHAR
TIME TIME
TIMESTAMP TIMESTAMP
TINYBOLB BINARY
TINYINT TINYINT
TINYTEXT VARCHAR
VARCHAR VARCHAR
YEAR INTEGER
探しても意外に情報が見つかりませんでした。データ型だけでなく細かいオプションの指定の仕方を知りたいのですが。