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の方で指定されているとは知らなかったので、いい勉強になりました。