- 追加された行はこの色です。
- 削除された行はこの色です。
&tag(マイグレーション);
*目次 [#v5671532]
#contents
*関連ページ [#dd30858c]
*参考情報 [#f8d1da54]
*マイグレーションファイルの作成 [#t8235a17]
**マイグレーションファイルを単体で生成する [#z9913a58]
- rails generateで生成可能。create_booksはCreateBooksでも可。[[NAMAKESUGI |[Rails4] migrationコマンドまとめ:http://namakesugi.blog42.fc2.com/blog-entry-157.html]]
bundle exec rails generate migration create_books
- createから始めたらcreate table、addから始めたらカラムの追加、removeから始めたらカラムの削除用のテンプレートを自動で作ってくれる。
**例1: テーブル生成 [#t4d00d54]
-booksテーブルを生成する場合。
bundle exec rails generate migration create_books
-以下のようにファイルを書き換える。
#pre{{
class CreateHoges < ActiveRecord::Migration
def change
create_table :hoges do |t|
t.string :name
t.integer :age
t.timestamps
end
end
end
}}
**例2: テーブルにカラムを追加する [#ke1e3352]
***テーブルに文字列カラムを追加する [#ib05cf4e]
-booksテーブルにimageカラム(文字列)を追加する
bundle exec rails generate migration add_image_to_books
-以下のようにファイルを書き換える。
#pre{{
class AddImageToBooks < ActiveRecord::Migration
def change
add_column :books, :image, :string
end
end
}}
***テーブルにMySQLのLONGTEXTカラムを追加する [#d856bcf4]
-":text"だけだとLONGTEXTにならない。, :limitが必要。[[コチョナナバ: railsでmysqlのlongtext型を使う:http://kingyo-bachi.blogspot.jp/2013/06/railsmysqllongtext.html]]
#pre{{
class AddDescriptionToBooks < ActiveRecord::Migration
def change
add_column :books :description, :text, :limit => 4294967295
end
end
}}
*実行 [#be4a52be]
**通常実行 [#n1cd69c5]
-マイグレーション実行。何も指定しないとdevelopment環境が更新される。
bundle exec rake db:migrate
**環境を指定して実行 [#p7792130]
-production環境を更新したい場合
bundle exec rake db:migrate RAILS_ENV=production
-マイグレーション再実行
**戻す [#r50b0142]
-rollbackを指定する
bundle exec rake db:rollback
**マイグレーションを再実行 [#u613f246]
-DB削除、DB作成、マイグレーションを全部実行する。
bundle exec rake db:migrate:recet
-現在のスキーマに基いて実行したい場合は以下のコマンド。
bundle exec rake db:reset
現在の状態に基いてテーブルを作り直したい場合「db:reset」じゃないとだめ。手作業でテーブル定義を修正していてマイグレーションファイルが不完全な場合、db:resetじゃないとおかしなことになる。[[DBをリセットするrakeタスク二つ - maeshimaの日記:http://maeshima.hateblo.jp/entry/20100412/1271058806]]
**schema.rbの作成 [#i0c9e9ac]
-現在のDBからschema.rbを作成したい場合
bundle exec rake db:schema:dump
*状態確認 [#scebff42]
-db:migrate:statusで現在の状態を確認できる。Statusがupのところが実行済みのもの。
#pre{{
$ bundle exec rake db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20140927082920 Create books
up 20140927084708 Create hoges
up 20141121060148 Create software infos
down 20150409052819 Create settings
}}
-db:versionで現在どこまで進んでいるかを確認できる。
#pre{{
$ bundle exec rake db:version
Current version: 20141121060148
}}