mysql2とRailsの組み合わせでエラーが発生する
概要
RailsのGemを更新しようとしたら、MySQLとの接続に使われるmysql2のバージョンが0.5.0に上がっていました。
そこで、mysql2のバージョンを0.5.0に上げてテストを実行したら次のように表示されてmysql2が使えませんでした。
Specified ‘mysql2’ for database adapter, but the gem is not loaded. Add gem ‘mysql2’ to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
これについて調べてみたのでそのことをここに書いておきます。
環境
- Rails 5.1.5
- mysql2 0.5.0
原因
エラーメッセージを見てみると、mysql2が見つからないというように書かれています。
実はRailsでは、データベース関係のGemについて使用できるGemのバージョンを制限しています。
今回私が遭遇したRailsのバージョン5.1.5では、バージョンの指定が~> 0.4.4
となっており、0.5.0以上のバージョンの場合は読み込まれません。
そのため、mysql2のバージョン0.5.0をインストールしても、読み込まれず、mysql2は見つからないというエラーメッセージが表示されました。
対処
このようなことから、現状ではmysql2のバージョン0.5.0にはせずに、バージョンを上げても0.5.0未満にしておく必要があります。
実際には、Gemfileのmysql2の部分を次のようにしましょう。
gem 'mysql2', '~> 0.4.4'
このようにしておけば、bundle update
を実行しても0.4.xの範囲で新しいバージョンのものに更新します。
今後
次のプルリクエストで解決されているため、おそらく次のRailsのバージョンではこの問題が解決していると思います。
github.com/rails/rails/pull/32310
さいごに
データベースのGemのバージョンがRailsの方で指定されているとは知らなかったので、いい勉強になりました。