Posted at

rails Herokuでrails db:migrate時に突然エラー発生!! postgresqlバージョン問題 

More than 1 year has passed since last update.


概要

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を追加したが、その時にバージョンを指定いていなかった。


Gemfile.rb

gem 'pg', group: :production


こんな感じ。

そして、herokuではデプロイ毎にbundle installが行われる仕様?のようで、いつしかpgのバージョンがアップデートされて、herokuが対応していないものになったらしい。

(ログを確認すると、 pg 0.21.0がインストールされていた。)

なので、対応しているバージョンを指定してインストールする必要があった。

今回は、対応している中で一番最新(っぽい)pg 0.19.0をインストールしたらうまくいった。

やり方は、gemfileを以下のように書き替える。


Gemfile.rb

gem 'pg', '~> 0.19.0', group: :production


無事解決!!

いつから問題が起きていたのだろうか...


感想

herokuを使っていると、たまにこのようなエラーに遭遇して焦る。

そして、いままでは、新しいherokuのアプリを作成してそちらに移行したり、データベースをリセットするなどして無理やり解決してきた。笑

しかし、今回は粘って調べた結果、無事解決することができてよかった。

経験値が増えました。

そして、この記事が同様の問題で困っている人の助けになれば幸いです。