&tag(マイグレーション); *目次 [#v5671532] #contents *関連ページ [#dd30858c] -[[Rails]] *参考情報 [#f8d1da54] *マイグレーションファイルの単体作成 [#t8235a17] - 「rails generate migration マイグレーション名」で生成可能。[[NAMAKESUGI |[Rails4] migrationコマンドまとめ:http://namakesugi.blog42.fc2.com/blog-entry-157.html]] - createから始めたらcreate table、addから始めたらカラムの追加、removeから始めたらカラムの削除用のテンプレートを自動で作ってくれる。 -テーブル生成用のマイグレーション bundle exec rails generate migration create_books **例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: テーブルに文字列カラムを追加する [#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 }} **例2: テーブルに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 }} *モデルファイル込みで生成 [#s3b2da4d] -bundle exec rails g model モデル名 カラム定義…で生成する。 bundle exec rails g model product name:string price:integer *モデルコントローラービュー込みで生成 [#h16f3094] -bundle exec rails g scaffold モデル名 カラム定義…で生成する。 bundle exec rails g scaffold product name:string price:integer *実行 [#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:reset -現在のスキーマに基いて実行したい場合は以下のコマンド。 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 }}