Rails/マイグレーション
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&tag(マイグレーション);
*目次 [#v5671532]
#contents
*関連ページ [#dd30858c]
-[[Rails]]
*参考情報 [#f8d1da54]
*マイグレーションファイルの作成 [#f2f4eb5f]
**マイグレーションファイルの単体作成 [#t8235a17]
- 「rails generate migration マイグレーション名」で生成可...
- createから始めたらcreate table、addから始めたらカラムの...
-[[Rails4のマイグレーションの書き方まとめ | @cyber_yoshid...
-属性を変更する場合やカラムを削除する場合はchangeでrevers...
*** テーブル生成 [#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
}}
*** テーブルに文字列カラムを追加する [#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
}}
***テーブルの型を変更する [#b9abd1d6]
-booksテーブルのtitleをstringからtextに変更する
bundle exec rails generate migration change_title_type_o...
-マイグレーションファイルを編集する
#pre{{
class ChangeTitleTypeOfBooks < ActiveRecord::Migration
def change
change_column :books, :title, :text
end
end
}}
***テーブルにインデックスを追加する [#zf93952a]
-accessesテーブルのdateカラムにインデックスを追加する
bundle exec rails generate migration add_date_index_to_...
-マイグレーションファイルを編集する
#pre{{
class AddDateIndexToAccesses < ActiveRecord::Migration
def change
add_index :accesses, :date
end
end
}}
**テーブルに複合インデックスを追加する [#v7dbb8f4]
-複合インデックスの指定方法
#pre{{
class AddDateIndexToAccesses < ActiveRecord::Migration
def change
add_index :accesses, [:date, :key]
end
end
}}
*** テーブルにMySQLのLONGTEXTカラムを追加する [#d856bcf4]
-":text"だけだとLONGTEXTにならない。, :limitが必要。[[コ...
#pre{{
class AddDescriptionToBooks < ActiveRecord::Migration
def change
add_column :books :description, :text, :limit => 4294...
end
end
}}
***カラムのデフォルト値を設定する [#l8d14b64]
-migrationファイル中でadd_columnした後、updateなどでデフ...
#pre{{
add_index :feeds, :folder_id
Feed.reset_column_information
#フィードのfolder_idのデフォルト設定
Feed.where(:feed_provider_id => 1).update_all(:folder...
}}
**モデルファイル込みで生成 [#s3b2da4d]
-bundle exec rails g model モデル名 カラム定義…で生成する。
bundle exec rails g model product name:string price:inte...
**モデルコントローラービュー込みで生成 [#h16f3094]
-bundle exec rails g scaffold モデル名 カラム定義…で生成...
bundle exec rails g scaffold product name:string price:i...
**マイグレーションファイルのバージョン指定 [#s4e1a856]
-Rails 5からMigrationファイルにバージョンが指定できるよう...
#pre{{
class AddUrlToFeeds < ActiveRecord::Migration[5.0]
def change
end
end
}}
-これによってRailsのバージョン毎のルールにのっとったマイ...
-例えばRails 5.0では主キーがIntだがRails 5.1ではデフォル...
--[[Rails 5.1以前に作成されたテーブルにFK制約を張れない問...
--[[Rails 5から導入されたmigration versioingについて | 日...
--[[Rails 5.1にスムーズにアップグレードするためにやった6...
*マイグレーションファイルの削除 [#f77af3b7]
-[[railsのrakeで作成したmigrationファイルとstatus履歴を削...
-一度作成したけど不要になった場合。
-以下のコマンドで削除する。up状態で実行してもうまくいく?
bundle exec rails destroy migration マイグレーションクラ...
bundle exec rails destroy migration マイグレーションファ...
-もしくはrollbackしてdown状態で手動でマイグレーションファ...
*マイグレーション実行 [#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」...
**マイグレーションをスキップ [#zbd4e94b]
-Pending状態になっているマイグレーションファイルをスキッ...
-[[ruby on rails - How do you skip failed migrations? (ra...
-[[Railsでマイグレーションを介さずにサーバーでDBを変更し...
手順
-マイグレーションの番号を取得。downとなっているのが適用さ...
bundle exec rake db:migrate:status
-sqlを実行する
INSERT INTO schema_migrations (version) VALUES(201310311...
**schema.rbの作成 [#i0c9e9ac]
-現在のDBからschema.rbを作成したい場合
bundle exec rake db:schema:dump
*状態確認 [#scebff42]
**マイグレーションの適用状態を確認する [#c6592d1b]
-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
}}
**現在のdbバージョンを確認する [#p9b4f5c9]
-db:versionで確認できる。
Current version: 20141208044134
*Tips [#h76d2731]
**マイグレーションファイルをまとめる [#rabcdba9]
-[[Railsのマイグレーションファイルを既存のスキーマ、デー...
-schema.rbとデータベースの内容が食い違っていて、schema.rb...
bundle exec rake db:schema:load
-既存のデータベースからschema.rbを生成
bundle exec rake db:schema:dump
-マイグレーションファイルの作成。マイグレーションファイル...
bundle exec rails g migration create_tables
-マイグレーション実行
bundle exec rake db:migrate
※schema:dumpだとテーブルの情報が一部抜け落ちてしまう場合...
*トラブルシューティング [#e7bf77ea]
** migrationの状態を確認したらNO FILEと表示された [#cb916...
-該当するマイグレーションファイルが存在しない場合「rake d...
-この場合該当するダミーマイグレーションファイルを以下の内...
#pre{{
class Tmp < ActiveRecord::Migration
def change
end
end
}}
-down状態に変更
bundle exec rake db:migrate:down VERSION=999
-999_tmp.rbを削除する。
**MyISAMテーブルがschema.rbに反映されない [#k9bc12fa]
-どうやら仕様らしい。
-schema.rbだけに頼らず、マイグレーションファイルを一つに...
-もしくはschema.rbのかわりにsqlとして管理する方法もあるら...
**Rails 5でbundle exec rake db:resetでエラー [#aa099f32]
-本番か今日から取り込んだデータで以下のコマンドを実行する...
RAILS_ENV=development bundle exec rake db:reset
-Rails 5だと情報がテーブルに保存されていてそれが原因らし...
-以下のコマンドで設定する。
bundle exec rails db:environment:set RAILS_ENV=development
RAILS_ENV=development bundle exec rake db:reset
**Directly inheriting from ActiveRecord::Migration is not...
-Rails 5からMigrationクラスにバージョンを指定する必要がで...
-マイグレーションファイルを作成した際の正確なバージョンを...
-面倒な場合、本番のデータをmysqldumpなどでまるまるコピー...
終了行:
&tag(マイグレーション);
*目次 [#v5671532]
#contents
*関連ページ [#dd30858c]
-[[Rails]]
*参考情報 [#f8d1da54]
*マイグレーションファイルの作成 [#f2f4eb5f]
**マイグレーションファイルの単体作成 [#t8235a17]
- 「rails generate migration マイグレーション名」で生成可...
- createから始めたらcreate table、addから始めたらカラムの...
-[[Rails4のマイグレーションの書き方まとめ | @cyber_yoshid...
-属性を変更する場合やカラムを削除する場合はchangeでrevers...
*** テーブル生成 [#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
}}
*** テーブルに文字列カラムを追加する [#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
}}
***テーブルの型を変更する [#b9abd1d6]
-booksテーブルのtitleをstringからtextに変更する
bundle exec rails generate migration change_title_type_o...
-マイグレーションファイルを編集する
#pre{{
class ChangeTitleTypeOfBooks < ActiveRecord::Migration
def change
change_column :books, :title, :text
end
end
}}
***テーブルにインデックスを追加する [#zf93952a]
-accessesテーブルのdateカラムにインデックスを追加する
bundle exec rails generate migration add_date_index_to_...
-マイグレーションファイルを編集する
#pre{{
class AddDateIndexToAccesses < ActiveRecord::Migration
def change
add_index :accesses, :date
end
end
}}
**テーブルに複合インデックスを追加する [#v7dbb8f4]
-複合インデックスの指定方法
#pre{{
class AddDateIndexToAccesses < ActiveRecord::Migration
def change
add_index :accesses, [:date, :key]
end
end
}}
*** テーブルにMySQLのLONGTEXTカラムを追加する [#d856bcf4]
-":text"だけだとLONGTEXTにならない。, :limitが必要。[[コ...
#pre{{
class AddDescriptionToBooks < ActiveRecord::Migration
def change
add_column :books :description, :text, :limit => 4294...
end
end
}}
***カラムのデフォルト値を設定する [#l8d14b64]
-migrationファイル中でadd_columnした後、updateなどでデフ...
#pre{{
add_index :feeds, :folder_id
Feed.reset_column_information
#フィードのfolder_idのデフォルト設定
Feed.where(:feed_provider_id => 1).update_all(:folder...
}}
**モデルファイル込みで生成 [#s3b2da4d]
-bundle exec rails g model モデル名 カラム定義…で生成する。
bundle exec rails g model product name:string price:inte...
**モデルコントローラービュー込みで生成 [#h16f3094]
-bundle exec rails g scaffold モデル名 カラム定義…で生成...
bundle exec rails g scaffold product name:string price:i...
**マイグレーションファイルのバージョン指定 [#s4e1a856]
-Rails 5からMigrationファイルにバージョンが指定できるよう...
#pre{{
class AddUrlToFeeds < ActiveRecord::Migration[5.0]
def change
end
end
}}
-これによってRailsのバージョン毎のルールにのっとったマイ...
-例えばRails 5.0では主キーがIntだがRails 5.1ではデフォル...
--[[Rails 5.1以前に作成されたテーブルにFK制約を張れない問...
--[[Rails 5から導入されたmigration versioingについて | 日...
--[[Rails 5.1にスムーズにアップグレードするためにやった6...
*マイグレーションファイルの削除 [#f77af3b7]
-[[railsのrakeで作成したmigrationファイルとstatus履歴を削...
-一度作成したけど不要になった場合。
-以下のコマンドで削除する。up状態で実行してもうまくいく?
bundle exec rails destroy migration マイグレーションクラ...
bundle exec rails destroy migration マイグレーションファ...
-もしくはrollbackしてdown状態で手動でマイグレーションファ...
*マイグレーション実行 [#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」...
**マイグレーションをスキップ [#zbd4e94b]
-Pending状態になっているマイグレーションファイルをスキッ...
-[[ruby on rails - How do you skip failed migrations? (ra...
-[[Railsでマイグレーションを介さずにサーバーでDBを変更し...
手順
-マイグレーションの番号を取得。downとなっているのが適用さ...
bundle exec rake db:migrate:status
-sqlを実行する
INSERT INTO schema_migrations (version) VALUES(201310311...
**schema.rbの作成 [#i0c9e9ac]
-現在のDBからschema.rbを作成したい場合
bundle exec rake db:schema:dump
*状態確認 [#scebff42]
**マイグレーションの適用状態を確認する [#c6592d1b]
-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
}}
**現在のdbバージョンを確認する [#p9b4f5c9]
-db:versionで確認できる。
Current version: 20141208044134
*Tips [#h76d2731]
**マイグレーションファイルをまとめる [#rabcdba9]
-[[Railsのマイグレーションファイルを既存のスキーマ、デー...
-schema.rbとデータベースの内容が食い違っていて、schema.rb...
bundle exec rake db:schema:load
-既存のデータベースからschema.rbを生成
bundle exec rake db:schema:dump
-マイグレーションファイルの作成。マイグレーションファイル...
bundle exec rails g migration create_tables
-マイグレーション実行
bundle exec rake db:migrate
※schema:dumpだとテーブルの情報が一部抜け落ちてしまう場合...
*トラブルシューティング [#e7bf77ea]
** migrationの状態を確認したらNO FILEと表示された [#cb916...
-該当するマイグレーションファイルが存在しない場合「rake d...
-この場合該当するダミーマイグレーションファイルを以下の内...
#pre{{
class Tmp < ActiveRecord::Migration
def change
end
end
}}
-down状態に変更
bundle exec rake db:migrate:down VERSION=999
-999_tmp.rbを削除する。
**MyISAMテーブルがschema.rbに反映されない [#k9bc12fa]
-どうやら仕様らしい。
-schema.rbだけに頼らず、マイグレーションファイルを一つに...
-もしくはschema.rbのかわりにsqlとして管理する方法もあるら...
**Rails 5でbundle exec rake db:resetでエラー [#aa099f32]
-本番か今日から取り込んだデータで以下のコマンドを実行する...
RAILS_ENV=development bundle exec rake db:reset
-Rails 5だと情報がテーブルに保存されていてそれが原因らし...
-以下のコマンドで設定する。
bundle exec rails db:environment:set RAILS_ENV=development
RAILS_ENV=development bundle exec rake db:reset
**Directly inheriting from ActiveRecord::Migration is not...
-Rails 5からMigrationクラスにバージョンを指定する必要がで...
-マイグレーションファイルを作成した際の正確なバージョンを...
-面倒な場合、本番のデータをmysqldumpなどでまるまるコピー...
ページ名: