0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】mysql2 gemがインストールできない原因と解決までの道のり【環境構築トラブルシュート】

Posted at

背景

Devin環境でRailsアプリのセットアップを行っていた際、bundle install を実行したところ mysql2 gem のインストールが失敗し、原因特定と解決までに非常に時間がかかりました。

同じような環境で詰まっている方の参考になればと思い、原因と解決までの道のりをまとめます。

mysql2とは

mysql2Ruby (Rails) と MySQLデータベースを接続するためのgem です。

Railsの config/database.ymladapter: mysql2 を指定している場合、MySQLに接続するために mysql2 gem が必須になります。
ただし、MySQLの公式Cライブラリ (libmysqlclient) に依存しており、インストール時にC拡張のビルドが必要 なため、環境によってはセットアップ時にエラーが発生しやすいです。

環境

  • OS: Ubuntu (Devin環境)
  • Ruby: 3.2.1
  • Bundlerで mysql2 0.5.6 をインストールしようとした

発生したエラー

bundle install 実行時に以下のエラーが発生。

An error occurred while installing mysql2 (0.5.6), and Bundler cannot continue.

詳細なログでは mkmf.rb 内で NoMethodError が発生していました。

mkmf.rb:1083:in `block in find_library': undefined method `split' for nil:NilClass (NoMethodError)

試したこと

opensslの設定

最初は、openssl関連のエラーかと思い、Homebrewでインストールした openssl@3 のパスを環境変数に設定しました。

export LDFLAGS="-L/home/linuxbrew/.linuxbrew/opt/openssl@3/lib"
export CPPFLAGS="-I/home/linuxbrew/.linuxbrew/opt/openssl@3/include"
export PKG_CONFIG_PATH="/home/linuxbrew/.linuxbrew/opt/openssl@3/lib/pkgconfig"

bundle config build.mysql2 --with-ldflags="${LDFLAGS}" --with-cppflags="${CPPFLAGS}" --with-opt-dir="/home/linuxbrew/.linuxbrew/opt/openssl@3"

しかし、エラーは解消せず。

MySQL本体 (brew install mysql) のインストール

MySQL本体が必要かと思い、HomebrewでMySQLをインストール。

brew install mysql

しかし、mysql2 gem のビルド失敗には影響しませんでした。

原因

最終的な原因は、MySQLの開発用パッケージ (libmysqlclient-dev) がインストールされていないこと でした。

mysql2 gem をインストールするには、MySQLが提供しているC言語のライブラリ(libmysqlclient)と、その設計図であるヘッダファイル(mysql.h)が必要です。
※ プログラムがビルド時に必要とする設計図ファイル

Devin環境(Ubuntu系)では、このライブラリとヘッダは aptパッケージ (libmysqlclient-dev) として提供されており、これをインストールしないと mysql2 gem を正しくビルドできません。

HomebrewでMySQL本体をインストールしていても、ビルド時には参照されない ため、インストールに失敗していました。

解決方法

以下のコマンドで必要なパッケージをインストールし、bundle install したところ正常にインストールが完了しました。

sudo apt update
sudo apt install -y libmysqlclient-dev build-essential
bundle install

これにより MySQL公式Cライブラリとビルドツールがインストール され、mysql2 gem が正常にビルド・インストールされました。

まとめ

試したこと 効果 理由
opensslのパス設定 opensslはmysql2 gemの必須依存ではなかった
brew install mysql Devin(Ubuntu)環境ではHomebrewのMySQLは無関係
libmysqlclient-devのインストール mysql2 gemのC拡張ビルドに必須

最後に

今回のトラブルシュートを通じて、mysql2 gem のインストールにはMySQLの開発パッケージが必須 であることを再確認しました。

環境構築で詰まっている方は、まず libmysqlclient-dev の存在 を確認してみてください。
私自身、ここで多くの時間を使ってしまったので、この記事が同じ悩みを持つ方の助けになれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?