3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails + Docker 開発中に PendingMigrationError が出たときの解決法

Posted at

RailsとDockerでアプリ開発をしています。

Deviseによる認証機能を実装しようとgemをインストールし、Userテーブルを作成、db:migrateしたところ、localhost3000で次のようなエラーが発生しました。

ActiveRecord::PendingMigrationError

Image from Gyazo

「移行が保留中です」という意味になります。

先に解決した方法をお伝えします。

【結論】解決法 Run pending migrationsを押す

初めは気が付かなかったのですが、エラー画面の中にRun pending migrationsというボタンがあります。
Image from Gyazo
これを押しただけで解決しました。
とても簡単

確認・試したこと(これらは全滅でした)

マイグレーション状態の確認

docker compose exec web bin/rails db:migrate:status

→ ステータスはすべて up。DBには反映されている。
マイグレーションファイルも作られていますが、何も触っていないです。

Dockerコンテナ再起動

docker compose down
docker compose up
docker compose restart web

ページのリロードもしましたが効果なし

Rails環境の確認

「開発(development)なのに本番モード(production)で動いているから挙動がおかしいのでは?」とAIから指摘をもらったので、gemを追加するまでは問題なく表示されていたのでそんなことあるのかと疑問に思いつつも確認しました。

docker compose exec web bin/rails runner "p Rails.env"

→"development"
しっかり開発環境になっていました。

PIDファイルの削除

docker compose exec web rm -f tmp/pids/server.pid

PIDファイルの削除も試しましたが、これはサーバーが「起動すらできない」時の対処法なので、今回のように「起動しているがエラーが出る」ケースでは関係がありませんでした。

なぜエラーになった?

はっきりした原因は断定できませんが、
migration 自体は DB に適用されているにもかかわらず、
起動中の Rails プロセスが「未適用の migration がある」と判定してしまった状態でした。

Run pending migrations ボタンは、
今まさに動いている Rails サーバープロセス自身が migration を再確認・実行するため、
このズレが解消され、正常に表示されるようになったと考えられます。

同じエラーに遭遇した場合は、
コマンドを疑う前に、まず Run pending migrations を押してみるのも一つの手だと思います。

3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?