Windows + Ruby 環境での Redmine インストール奮闘記:mysql2 gem インストール地獄からの脱出
先日、Windows 環境に Redmine をインストールしようとした際、予想外の壁にぶち当たりました。それは、Redmine がデータベース接続に利用する mysql2
gem のインストールです。
この記事では、私が数日にわたり試行錯誤し、最終的に mysql2
gem のインストールを成功させるまでの道のりを記録として残します。もし同様の問題に遭遇している方の助けになれば幸いです。
環境
- OS: Windows 11 (64bit)
- Ruby: 3.2.x (32bit 版)
- MySQL: 5.7 (32bit 版)
- MySQL Connector/C: 6.1 (32bit 版)
- Redmine: 6.0.5
すべて最新のアプリの組み合わせだとひどいことになりました。今回はこの組み合わせでインストールしました。
問題の発端
Redmine のインストール手順に従い bundle install
を実行したところ、mysql2
gem のビルド中にエラーが発生し、インストールが中断されてしまいました。エラーメッセージは様々でしたが、主に MySQL クライアントライブラリが見つからない、またはバージョンが合わないといった内容でした。
試行錯誤の軌跡
ここから、私の長い試行錯誤が始まりました。
-
MySQL Connector/C のインストールとパス設定: まず、MySQL Connector/C が正しくインストールされているかを確認し、
bundle config
を使用して MySQL のインストールディレクトリを指定しました。しかし、状況は改善しませんでした。bundle config --local build.mysql2 "--with-mysql-dir='C:/Program Files (x86)/MySQL/MySQL Connector C 6.1'" bundle install
- 32bit 版と 64bit 版のアーキテクチャの統一: Ruby と MySQL Connector/C のアーキテクチャが一致しているかを確認し、最終的に 32bit 版の Ruby に再インストールしました。
-
libmysql.dll
の配置: 色々な情報をもとに、libmysql.dll
を Ruby の実行パスなどにコピーしたり、リネームしたりするなどの方法も試しましたが、効果はありませんでした。 -
--with-mysql-lib
と--with-mysql-include
オプションの明示的な指定:gem install mysql2
時に、MySQL Connector/C のライブラリディレクトリとインクルードディレクトリを明示的に指定しました。しかし、「ライブラリディレクトリが見つからない」というエラーが発生しました。gem install mysql2 -- --with-mysql-lib="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/lib/vs14/mysqlclient.lib" --with-mysql-include="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/include"
- Visual Studio Build Tools のインストール: ネイティブ拡張のビルドに必要なツールが不足している可能性を考慮し、Visual Studio Build Tools をインストールしました。
-
--with-ldflags
オプションの追加: 最終的に、以下のコマンドを実行することで、mysql2
gem のインストールに成功しました。gem install mysql2 -- --with-mysql-lib="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/lib" --with-mysql-include="C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/include" --with-ldflags="-L\"C:/Program Files (x86)/MySQL/MySQL Connector C 6.1/lib\" -lmysql" bundle install
ポイントは、
--with-ldflags
に-L
オプションでライブラリディレクトリを指定し、-lmysql
でライブラリ名を指定したことでした。
解決の糸口
長時間の試行錯誤の末、--with-ldflags
オプションに -lmysql
を追加することで、リンカが MySQL クライアントライブラリを正しく認識し、ビルドが成功したようです。なぜこのオプションが必要だったのかは明確には特定できませんでしたが、私の環境においてはこれが решающий фактор (決定的な要因) でした。
まとめ
Windows 環境での Ruby と MySQL の連携は、時に予期せぬトラブルに見舞われることがあります。また、Windows環境の場合は32bit版に統一するのが安全かもしれません。この記事が、同様の問題に苦しむ誰かの助けとなり、解決の糸口を見つけるきっかけとなれば幸いです。
もしこの記事を読んでも解決しない場合は、Redmine のコミュニティフォーラムや Stack Overflow などで、より詳細な環境情報を添えて質問してみることをお勧めします。