【Rails】rails sしたらActiveRecord::PendingMigrationError【解決済】


1.背景

共同開発でメンバーからプルリクのレビュー依頼を頂きました。
ローカルで動作確認を行おうと該当のブランチに切り替え、rails sでサーバーを立ち上げたところ、
下記のエラーが表示されました。

ActiveRecord::PendingMigrationError (

Migrations are pending. To resolve this issue, run:

        bin/rails db:migrate RAILS_ENV=development

You have 1 pending migration:

20210526151149_create_watches.rb

):

pendingとは保留中という意味です。

2.使用環境

  • mac.os バージョン10.15.6
  • Ruby 2.7.2
  • Rails 6.1.3.1
  • psql (PostgreSQL) 12.6

3.エラーの原因

今回のプルリク分ではマイグレーションファイルの更新を含む実装を行っているのですが、私自身ローカル環境に取り入れた際にデータベースの更新をしていませんでした。

4.エラーの解決方法

①保留中のマイグレーションファイルを確認

エラーから、保留になっている該当のファイルを確認します。

ActiveRecord::PendingMigrationError (

Migrations are pending. To resolve this issue, run:

        bin/rails db:migrate RAILS_ENV=development

You have 1 pending migration:

20210526151149_create_watches.rb

):

②マイグレーションの実行状況を確認

rails db:migrate:statusを実行します。

team_project % rails db:migrate:status

database: team_project_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20210411051744  Create texts
   up     20210411052029  Create movies
   ..
  down    20210526151149  Create watches

downは編集可能(マイグレーションが完了していない)の状態なので、ここでも
データベースが更新されていないことが確認できました。
※up:マイグレーションが完了している状態

③データベースを更新

rails db:migrateを実行します。

team_project % rails db:migrate
== 20210526151149 Create Watches: migrating ====================================
-- create_table(:watches)
   -> 0.0891s
-- add_index(:watches, [:user_id, :movie_id], {:unique=>true})
   -> 0.0026s
== 20210526151149 CreateWatches: migrated (0.0918s) ===========================

データベースが更新され、無事サーバーを起動することができました!

5.まとめ

エラー画面に発生箇所と原因が記載されているので、落ち着いて対処したら大丈夫だと思いました!
参考にした記事では他の原因の記載もあるので、合わせて確認して頂くと、理解が深まるかと思います。

6.参考

1.web:ActiveRecord::PendingMigrationErrorの解決方法
2.web:RailsのMigrationに関する基本まとめ

7.最後に

記事の感想や意見、ご指摘等あれば伝えていただけるとありがたいです。
読んでいただき、ありがとうございました。