突然ActiveRecord::PendingMigrationErrorが出て格闘した話

  • このエントリーをはてなブックマークに追加
  • LINEで送る
ruby

今、現場で使えるRuby on Rails 5速習実践ガイドをやっているんですが、

ずっと順調に来ていたのに突然エラーページが表示されるようになりました。

エラーページには

bin/rails db:migrate RAILS_ENV=development

と出ていたのでターミナルで打つと下の状態に

xxxx@xxxxx:~/taskleaf$ bin/rails db:migrate RAILS_ENV=development
== 20210105022129 CreateUsers: migrating ======================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Unknown key: :umnique. Valid keys are: :unique, :order, :name, :where, :length, :internal, :using, :algorithm, :type, :opclass
/home/xxxx/taskleaf/db/migrate/20210xxxxxxxxx_create_users.rb:3:in `change'
/home/xxxx/taskleaf/bin/rails:9:in `<top (required)>'
/home/xxxx/taskleaf/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
ArgumentError: Unknown key: :umnique. Valid keys are: :unique, :order, :name, :where, :length, :internal, :using, :algorithm, :type, :opclass
/home/xxxx/taskleaf/db/migrate/20210105022129_create_users.rb:3:in `change'
/home/xxxx/taskleaf/bin/rails:9:in `<top (required)>'
/home/xxxx/taskleaf/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

で、見る人が見るともう答えが出ているんですが(汗)
期待したことと違うことが起こると人は慌てるようで、
とりあえず出ていた下記のキーワードをググると

ActiveRecord::PendingMigrationError とあって調べてみると、

データベースの整合性が取れていないということらしい。
で、訳わかんないままマイグレーションかけても一向にエラーページは消えない。(そりゃあ、そうだ!)
しょうがないので全てデータベースを削除して最初からやり直すことに。
で、「rails 最初からやり直す」でググると下記のページに

https://qiita.com/Atsushi_/items/a230fb7f624d1eebf2f3

rake db:migrate:reset

上のコマンドを打てと見つけたが、rakeというコマンドなんか聞いたこともないぞ!
で、とりあえずやってみたが全く状況は変わらず。
根気強く一つずつエラーコードをコピーしてググるとこんなページを発見。

https://qiita.com/yuya_maru2/items/b839af0b60d8096ecf49

エラーコードにマイグレーションファイルに問題がある場合があるらしい。
で、自分のもあるかと思い読んでみると、

Unknown key: :umnique. Valid keys are: :unique, :order, :name, :where, :length, :internal, :using, :algorithm, :type, :opclass
/home/xxxx/taskleaf/db/migrate/20210xxxxxxxxx_create_users.rb:3:in `change'
/home/xxxx/taskleaf/bin/rails:9:in `<top (required)>'
/home/xxxx/taskleaf/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

ちゃんと書かれていました😅
で、指摘されているマイグレーションファイルをよく見ると、間違い発見!
修正してmigrationすると無事ページが表示されました。

xxxxx@xxxxx:~/taskleaf$ bin/rails db:migrate RAILS_ENV=development
== 20210105022129 CreateUsers: migrating ======================================
-- create_table(:users)
   -> 0.0290s
== 20210105022129 CreateUsers: migrated (0.0291s) =============================

== 20210106095404 AddAdminToUsers: migrating ==================================
-- add_column(:users, :admin, :boolean, {:default=>false, :null=>false})
   -> 0.0021s
== 20210106095404 AddAdminToUsers: migrated (0.0023s) =========================

めちゃくちゃ嬉しかったですが、オレの1日半を返してくれ~(T_T)
コンソールってエラーがちゃんと答えが書いているんですね😅
今度からちゃんと読もう。

きっとわかっている人から見ると簡単なことなんだろうけど、こういうことの繰り返しなんでしょうね。ここに書いてあることだけじゃなく、postgresqlのストップのやり方や、データベースをやり直すのに、drop,create,migrationの順番でやることとか、付随して覚えたから無駄じゃないと思います。
そして何より自分の頭でまとめ直して書いたから、理解が少し進んだことが何よりの収穫でした。

これからもわからないなりにまとめて書いていこうと思います。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*