Rails - izudon/izudon.github.io GitHub Wiki

pikawaka.com

  1. 基本
  2. マイグレ
  3. CUD
  4. アソシエ
  5. ヴァリデ
  6. コールバック

Rails の DBマイグレーション

マイグレーションとは・・・

  • 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 の実行モード

$ 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

これでこのコマンドの意味がわかった。

参考

⚠️ **GitHub.com Fallback** ⚠️