|
|
|
|
¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥¹¥¡¼¥Þ(Êѹ¹)¤ò´ÉÍý¤¹¤ëµ¡Ç½¤Ç¤¹¡£¤â¤ì¤Ê¤¯¤³¤ó¤ÊÆÃŵ¤¬¤Ä¤¤¤Æ¤¤Þ¤¹¡£
¥¹¥¡¼¥ÞÊѹ¹¤Ï ActiveRecord::Migration ¤Î¥µ¥Ö¥¯¥é¥¹¤òºî¤Ã¤ÆÄêµÁ¤·¤Þ¤¹¡£¥ê¥Ó¥¸¥ç¥ó´ÉÍý¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢³Æ¥Ð¡¼¥¸¥ç¥óËè¤Ë1¤Ä¤Î¥¯¥é¥¹¤òÄɲ乤뤳¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤Î¥¯¥é¥¹¤ÎÃæ¤ÇÄêµÁ¤·¤¿ up, down ¤È¤¤¤¦¥¯¥é¥¹¥á¥½¥Ã¥É¤ÎÆâÍÆ¤¬¡¢¤½¤ì¤¾¤ì¥¢¥Ã¥×¥°¥ì¡¼¥É¤È¥À¥¦¥ó¥°¥ì¡¼¥É»þ¤Î½èÍý¤È¤·¤Æ¼Â¹Ô¤µ¤ì¤Þ¤¹¡£Rails ¤Ç¤Ï Migration ÍѤΠgenerator ¤È rake ¥³¥Þ¥ó¥É¤¬½àÈ÷¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤µ¤é¤ËÁàºî¤¬´Êñ¤Ç¤¹¡£
up ¤È down ¤ÎÄêµÁ¤Ç¤Ï¡¢¥¹¥¡¼¥ÞÊѹ¹Áàºî¤òÃê¾ÝŪ¤Êµ½Ò¤Ç¹Ô¤¦¤³¤È¤¬¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ë¤è¤ê¡¢(Âбþ¤¹¤ëDB¤Ç¤¢¤ì¤Ð)Á´¤Æ¤ÎDB¤ÇƱ°ì¤Îµ½Ò¤¬²Äǽ¤Ë¤Ê¤ë¤«¤é¤Ç¤¹¡£(DBI¤ÈƱ¤¸»×ÁÛ)¡£°Ê²¼¤Î¥¹¥¡¼¥ÞÁàºî¤¬ÍøÍѲÄǽ¤Ç¤¹¡£
| Ãê¾Ýɽ¸½ | Ruby·¿ | PostgreSQL·¿ | MySQL·¿ |
| :primary_key | Fixnum | serial primary key | int(11) DEFAULT NULL auto_increment PRIMARY KEY |
| :string | String | character varying(255) | varchar(255) |
| :text | String | text | text |
| :integer | Fixnum | integer | int(11) |
| :float | Float | float | float |
| :datetime | Time | timestamp | datetime |
| :timestamp | Time | timestamp | datetime |
| :time | Time | timestamp | datetime |
| :date | Date | date | date |
| :binary | String | bytea | blob |
| :boolean | Object | boolean | tinyint(1) |
1. ¿·¤·¤¤ Migration ÄêµÁ¥Õ¥¡¥¤¥ë¤òºîÀ®¤¹¤ë % ruby script/generate migration my_new_migration 2. Migration ¤ÎÆâÍÆ¤òÄêµÁ¤¹¤ë % vi db/migrate/1_my_new_migration.rb 3. Migration ¤ò¼Â¹Ô¤¹¤ë % rake migrate
´û¸¤Î¥Æ¡¼¥Ö¥ë(members)¤Ë¿·¤·¤¤¥«¥é¥à(unitcode)¤òÄɲ䷤Ƥߤޤ·¤ç¤¦¡£
psql# \d members Column | Type | Modifiers ----------+-----------------------------+----------- code | integer | name | character varying(32) | birthday | timestamp without time zone |
º£²ó¤ÎÊѹ¹ÍѤÎMigrationÄêµÁ¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¡¢¥¢¥Ã¥×¥°¥ì¡¼¥É¤È¥À¥¦¥ó¥°¥ì¡¼¥É¤ÎÄêµÁ¤ò¤·¤Þ¤¹¡£
% ruby script/generate migration members_unitcode
create db/migrate
create db/migrate/1_members_unitcode.rb
% vi db/migrate/1_members_unitcode.rb
class MembersUnitcode < ActiveRecord::Migration
def self.up
add_column(:members, :unitcode, :integer, :default=>1)
end
def self.down
remove_column(:members, :unitcode)
end
end
Migration¤ò¼Â¹Ô¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
% rake migrate
¤Á¤ã¤ó¤ÈÈ¿±Ç¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¡¢¥¹¥¡¼¥Þ¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£¥Ð¡¼¥¸¥ç¥ó´ÉÍýÍѤΠ'schema_info' ¤È¤¤¤¦¥Æ¡¼¥Ö¥ë¤â¼«Æ°Åª¤ËºîÀ®¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£
psql# \d members
Column | Type | Modifiers
----------+-----------------------------+-----------
code | integer |
name | character varying(32) |
birthday | timestamp without time zone |
unitcode | integer | default 1
psql# SELECT * FROM schema_info;
version
---------
2
(¤³¤ì2¤Ë¤Ê¤ë¤ó¤Ç¤¹¤è¤Í¡£¤É¤³¤Þ¤ÇÅö¤Æ¤¿¤«¤À¤È1¤ò´üÂÔ¤·¤¿¤ó¤Ç¤¹¤¬¡£¼¡¤ÎMigration¥Õ¥¡¥¤¥ë¤¬3¤Ë¤Ê¤Ã¤Á¤ã¤¦¤·)
ÀèÄø¤Î members ¥Æ¡¼¥Ö¥ë¤ò MySQL ¤ÇÄêµÁ¤¹¤ë¾ì¹ç¡¢MigrationÄêµÁ¤Ï¤³¤ó¤Ê´¶¤¸¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£
class AddTableMember < ActiveRecord::Migration
def self.up
options = {
:primary_key => "code", # 'id' ¤Ç¤Ê¤¯¤Æ 'code' ÇɤʤΤÇ
:options => "ENGINE=MyISAM DEFAULT CHARSET=ujis"
}
create_table(:members, options) {|table|
table.column :name , :string , :limit => 32
table.column :birthday , :datetime
}
# ½é´üÃͤâÆþ¤ì¤Æ¤ß¤ë (º£²ó¤Î update ¤Ç Member ¥â¥Ç¥ë¤¬Äɲäµ¤ì¤Æ¤ë¤Ï¤º¤Ê¤Î¤ÇÍøÍÑ)
Member.create(:name=>"²Æ¾Æ²í" , :birthday=>'1992-08-25')
Member.create(:name=>"к ¡Çw¡Ç)", :birthday=>'1992-11-20')
...
end
def self.down
drop_table :members
end
end
mysql> describe members; +----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | code | int(11) | | PRI | NULL | auto_increment | | name | varchar(32) | YES | | NULL | | | birthday | datetime | YES | | NULL | | +----------+-------------+------+-----+---------+----------------+
DB¤ÎÆ©²áÀ¤Î¤¿¤á¤ËÃê¾ÝŪ¤ÊÁàºîÌ¿Îá¤Çµ½Ò¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢Ä¾ÀÜSQL¤òµ½Ò¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£´û¸¤ÎÁàºî¤Ç¤Ïɽ¸½ÉÔ²Äǽ¤Ê¤è¤ê¹âÅ٤ʥ¯¥¨¥ê¤ò¼Â¹Ô¤¹¤ë¾ì¹ç¤Ê¤É¤ËÌòΩ¤Á¤Þ¤¹¡£execute (ActiveRecord::Base.connection.execute) ¤ÇSQL¤òľÀܼ¹Ԥ·¤Þ¤¹¡£(ºÇ°¡¢¤³¤³¤ÇÉáÄÌ¤Ë CREATE TABLE ... ¤ò½ñ¤¯¤Î¤â¤¢¤ê¤«¤â)¡£
class AddUpdateTrigger < ActiveRecord::Migration
def self.up
execute(<<-SQL)
create function f_recorded_upd() returns trigger as '
begin
new.min := extract(epoch from new.stop-new.start)/60;
new.date := case when extract(''hour'' from new.start) < 5 then
to_char(new.start - interval ''1 day'', ''YYYYMMDD'') else
to_char(new.start, ''YYYYMMDD'') end;
return new;
end;
' language 'plpgsql';
create trigger recorded_upd before insert or update on recorded for each row
execute procedure f_recorded_upd();
SQL
end
def self.down
execute(<<-SQL)
drop trigger recorded_upd on recorded cascade;
drop function f_recorded_upd();
SQL
end
end
( ActiveRecord::Base.connection.execute ¤ÇǤ°Õ¤Î¥¯¥¨¥ê¤¬¼Â¹Ô¤Ç¤¤¿¤ó¤Ç¤¹¤Í¡£ÊÙ¶¯¤Ë¤Ê¤ë¤Ê¤¡)
¥¹¥¡¼¥ÞÊѹ¹°Ê³°¤ÎÍÑÅӤˤâÍøÍѤǤ¤Þ¤¹¡£Î㤨¤Ð¡¢ÌÀ¤é¤«¤Ë¤ª¤«¤·¤¤¥á¡¼¥ë¥¢¥É¥ì¥¹¤Î¥Ç¡¼¥¿¤Ïºï½ü¤¹¤ë¤³¤È¤Ë¤Ê¤Ã¤¿¾ì¹ç¡£
class ValidateEmail < ActiveRecord::Migration
def self.up
Users.find(:all).each do |user|
user.destroy unless user.email.include?('@')
end
# ¥¨¥ó¥È¥ê¿ô¤¬Â¿¤¤¤ÈÃϹö¤Ê¤Î¤ÇËÜÈÖ¤Ç¤Ï execute ¤Ç¥¯¥¨¥ê½ñ¤¤½¤¦¤À¤±¤É...
end
def self.down
# ¤³¤ì¤ÏÌ᤻¤Ê¤¯¤Æ¤è¤¤¤Î¤Ç̵»ë
end
end
к¡Çw¡Ç) ¡ãÊ£¿ô¤ÎMigration¤ò°ìµ¤¤Ë¼Â¹Ô¤¹¤ë¤È¤Å¬ÍѤνçÈÖ¤ÏÂç¾æÉפʤΤ«¤Ê¡©
ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ãºî¤Ã¤¿½çÈÖ¤ÇÄêµÁ¥Õ¥¡¥¤¥ë¤ÎÀèÆ¬¤¬¿ôÃÍÉÕ¤±¤µ¤ì¤Æ¤ë¤«¤éÂç¾æÉפ衣
Àî ¡¡¦_¡¦¡®ŽØ ¡ãµÕ¤Ë¡¢¹¥¤¤Ê½çÈÖ¤ËÆþ¤ìÂØ¤¨¤¿¤ê¥Þ¡¼¥¸¤·¤¿¤ê¤â¤Ç¤¤ë¤ó¤Ç¤¹¤Í¡£
½£*¡Æ o¡ÆŽØ ¡ãÈÖ¹æ¤òľÀܤ¤¤¸¤Ã¤¿¤é schema_info ¤Î version ¤È¤ÎÉÔÀ°¹ç¤Ï¼«¸ÊÀÕǤ¤Ç¤Í¡£
кoT¡¼Tк¡ã¤¢¤¦¤¡¡Á¡¢¤¨¡Á¤ª¡Á¤¢¡Á
ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ã¥Æ¡¼¥Ö¥ë¤ª¤«¤·¤¯¤Ê¤Ã¤¿¤Î¤Í¡£¤â¤¦µã¤«¤Ê¤¤¤Î¡£rake migrate VERSION=5 ¤È¤«¤Ç rollback ¤Ç¤¤ë¤«¤é¡£
к¡Çw¡Ç) ¡ãMigrationÄêµÁ¥Õ¥¡¥¤¥ë¤ÎƬ¤Î¿ôÃͤò VERSION ¤Ç»ØÄꤹ¤ì¤Ð¤¤¤¤¤ó¤À¤Í¡ª
к ¡¢à¡®Ðº¡ã¤Á¤Ê¤ß¤Ë¡¢rake migrate VERSION=0 ¤Ç°ìÈֺǽé¤Î¾õÂÖ¤ËÌá¤ì¤Þ¤¹¤è¡¼¡£
кoT¡¼Tк¡ã¤¢¤¦¤¡¡Á¡¢¤ª¡Á¤¢¡Á¤ª¡Á
ŽÉŽÉl¢ß_¢ß'ŽÙ ¡ãproduction ¤ËÈ¿±Ç¤µ¤»¤¿¤¤¤Î¤Í¡£rake environment RAILS_ENV=production migrate ¤Ç»ØÄê²Äǽ¤è¡£
ŽÙ üý-üýŽØ ¡ãÃê¾Ýɽ¸½¤Ç¥Æ¡¼¥Ö¥ëÄêµÁ¤·¤Æ¤¿¤é¡¢development ¤Ï PostgreSQL ¤Ç production ¤Ï MySQL ¤Æ¤Î¤â³Ú¤À¤Ê¡£
¡Ê¡(Ž´)¡®¡Ë޲ ¡ã.Ž¡oO(¤½¤ó¤ÊÊÑÂ֥ץ쥤¤Ï¤ª¤á¡¼¤À¤±¤À¤è¡£¤³¤Î¥Ñ¥ó¥Ä´Ý½Ð¤·¥¢¥¤¥É¥ë¤¬¡ª)
к¡Çw¡Ç) ¡ã¥Ç¥ì¥Ç¥ì!!¥·¥ó¥Ç¥ìLOVE!!¥¯¥¥¡¼¥ó¢ö¥¯¥¥¡¼¥ó¢ö
| JRuby | Rails | Berryz | ¡î-ute | ¥¨¥Ã¥° | jQuery |
| Á° | 2005ǯ 8·î |
¼¡ | ||||
| Æü | ·î | ²Ð | ¿å | ÌÚ | ¶â | ÅÚ |
| 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 | 31 | |||
ºÇ¶á¡¢Migration¤Ë¤Ï¤Þ¤Ã¤Æ¤Þ¤¹¡£<br>¤Á¤Ê¤ß¤Ë¡¢¥Ù¥ê¤Î²Æ¾Æ²í¤Á¤ã¤ó¤¬Åо졪¤Ê¤´¤ß¤Þ¤¹¤Í¤§¡¦¡¦^^;²í¤Á¤ã¤ó¤Ï¡¢1992-08-25¤Ê¤ó¤Ç¤¹¤Í^^;