今、現場で使える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の順番でやることとか、付随して覚えたから無駄じゃないと思います。
そして何より自分の頭でまとめ直して書いたから、理解が少し進んだことが何よりの収穫でした。
これからもわからないなりにまとめて書いていこうと思います。