Rails - izudon/izudon.github.io GitHub Wiki
- Rails init
- Rails VerUp
- Rails credentials
- Rails Model
- Rails 単数形と複数形
- Rails JSON
- Rails CORS
- Rails トークンベース認証
- Rails Tutorial
- 基本
- マイグレ
- R
- CUD
- アソシエ
- ヴァリデ
- コールバック
マイグレーションとは・・・
- SQLを書くことなく Ruby でデータベース内にテーブルを作成することができる機能。
- Rails 内の ActiveRecord という機能が Ruby を SQL に自動翻訳する。
- -> いわゆる O/R マッパーである。
- Rails で用いられている(MVCフレームワークにおける)モデル(M)(≒データ型)に
変更がある時、差分を SQL に翻訳して出力するコマンドがある。- 例
$ rails g model Blog
-- Blog というモデルについて出力する場合
- 例
- 新規に生成するコマンドもある
- 例
$ rails g migration CreateBlogs
-- Blog というモデルについて出力する場合
- 例
- 出力は
20151213130638_create_blogs.rb
のような- 年月日時分秒付きのファイル名で
-
./db/migrate/
に出力される。 - -> ファイル名が日付始まりなので自然と時系列順に並ぶ。
- -> Redmine でも多数出力されている
-
$ rake db:migrate
というコマンドを打つと、
これらのうちまだ実行されていない O/R マッパのコードが実行される(DBに反映される)。- -> アプリのバージョンアップの際はこの操作で DB を更新する。
但し・・・
- 後述の「実行モード」により、コミット先の DB が切替わる設定のことがあるため、
環境変数の指定RAILS_ENV=xxxxx
をつけたほうがいい。 - また、「実行モード」により、接続先 DB が変わる場合(SQLite -> MySQL など)、
gem が更新されたりすることがあるので、先頭にbundle exec
とつけたほうがいい。 - かつ、そのときログイン中のユーザでは、DB に更新権限がないことがあるため、
冒頭にsudo
コマンドが必要である。 - 結果的に、マイグレーションを実行するコマンドは以下のようになる。
$ sudo -u <db_user> RAILS_ENV=<exec_mode> bundle exec rake db:migrate
$ RAILS_ENV=production bundle exec rake db:migrate
- Rails には「実行モード」というのがある。
- 実行モードは production, test, development などのキーワードで示される。
- データベースの接続方法を database.yml で指定したりするが、
ここに各実行モードごとのデータベース接続設定を
書いておくことが可能である。例えば・・・- development モードならローカルディスクの sqlite3。
- test モードなら MySQL の試験環境。
- prodoction モードなら MySQL の本番環境。
- bundle, rake などをするときもこの「実行モード」が効いてくる。
モードを間違えると Gems のインストールがなされなかったり
必要なテーブルができなかったりすることがありえる。 - 実行モードはシステムの(OSの/シェルの)環境変数
RAILS_ENV で指定する。
$ RAILS_ENV=production bundle exec rake db:migrate
これでこのコマンドの意味がわかった。