#概要
Herokuを利用してアプリを公開しているが、いつも通りモデルを追加してデプロイし、rails db:migrate
をしたら以下のようなエラーが発生!
Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
herokuでは、mySQLは使用できず、postgresqlを使用することが推奨されている。
そのため、gemfileにはpgを追加して、postgresqlを使用している。
この環境で今まで動いていたのにいきなりエラーを吐くようになってしまった...
確認してもgem にはpgが書かれているし、エラーログを見てもpgのインストール自体は正常にされている。
いろいろ調べた結果、解決できたので記事にまとめます。
参考サイト:Herokuデプロイ後にdb:migrateが失敗した時の状況とやったこと
#原因
原因を簡潔に言うと、pgのバージョンが問題でした。
herokuを使用し始めたときに、gemfileにpgを追加したが、その時にバージョンを指定いていなかった。
gem 'pg', group: :production
こんな感じ。
そして、herokuではデプロイ毎にbundle installが行われる仕様?のようで、いつしかpgのバージョンがアップデートされて、herokuが対応していないものになったらしい。
(ログを確認すると、 pg 0.21.0
がインストールされていた。)
なので、対応しているバージョンを指定してインストールする必要があった。
今回は、対応している中で一番最新(っぽい)pg 0.19.0
をインストールしたらうまくいった。
やり方は、gemfileを以下のように書き替える。
gem 'pg', '~> 0.19.0', group: :production
無事解決!!
いつから問題が起きていたのだろうか...
#感想
herokuを使っていると、たまにこのようなエラーに遭遇して焦る。
そして、いままでは、新しいherokuのアプリを作成してそちらに移行したり、データベースをリセットするなどして無理やり解決してきた。笑
しかし、今回は粘って調べた結果、無事解決することができてよかった。
経験値が増えました。
そして、この記事が同様の問題で困っている人の助けになれば幸いです。