LoginSignup
7
5

More than 5 years have passed since last update.

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

Posted at

背景

  • 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に登録済みのタイムスタンプをマイグレーションファイルのファイル名に付けておけば実行されない。
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5