RailsでDBを共有する別アプリケーションを作る時のマイグレーション設定

背景

  • Rails 4.2 で開発していたアプリケーションを 5.2 まで上げたい
  • コードが滅茶苦茶だったのと、規模がそこまで大きくなかったので、DBだけ引き継いで新しいアプリケーションとして作りたい
  • マイグレーションファイルの設定を誤るとDBの全レコードが消えるのでローカルで慎重に動作確認する

環境

  • Ruby on Rails 4.2 -> 5.2
  • Ruby 2.5.1

手順

  1. rails new xxx コマンドでプロジェクトを作成する
  2. 旧アプリの config/database.yml の内容を新アプリにコピペする
  3. 旧アプリのモデルを全て rails g model xxx コマンドで生成する(カラム設定は不要)
  4. 自動生成されたマイグレーションファイルを削除する
  5. 旧アプリの db/schema.rb を新アプリの db/migrations/ ディレクトリ配下にコピーする
  6. DBの schema_migrations を見て、最新のタイムスタンプを上記のファイル名の先頭に付け、適当なファイル名に変更する(例: 20180401100000_create_initial_database.rb など)
  7. ファイル名に合わせてマイグレーションファイルのクラス名を編集し、 ActiveRecord::Migration の末尾に旧バージョン [4.2] を付ける。あと def change ~ end も追加する。
  8. rails db:migrate を実行して schema.rb を生成する

解説

  • Railsは rails db:migrate 実行時にマイグレーションファイルのタイムスタンプをDBのschema_migrations内レコードと照合し、ファイル名のタイムスタンプがまだDBに登録されていなければ、マイグレーションを実行する。
  • そのため既にDBに登録済みのタイムスタンプをマイグレーションファイルのファイル名に付けておけば実行されない。
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.