Windows Rails でmysql2 のインストールに失敗したときの対応

WindowsPC にRedmineをインストールするとき、公式サイト通りにやっていたのですが、mysql2のインストールに失敗しました。

今回は、失敗したときの対応を備忘録として書きます。最終的には、インストールできました。

mysql2は、bundle install 前に、別途コマンドでインストールする必要があります。また、with-mysql-dirにRubyフォルダのmsys64/nubgw64 を指定します。

目次

bundle installでmysql2 でつまづく

WindowsPC にRedmine をインストールするとき、buidle install を実行したとき、以下のエラーが発生しました。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

~略~

Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

~略~

To see why this extension failed to compile, please check the mkmf.log which can
be found here:

~略~

An error occurred while installing mysql2 (0.5.5), and Bundler cannot continue.
エラー全文
Installing mysql2 0.5.5 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory:
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.5/ext/mysql2
E:/soft/Ruby31-x64/bin/ruby.exe -I E:/soft/Ruby31-x64/lib/ruby/3.1.0 extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_gc_mark_movable()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_enc_interned_str() in ruby.h... yes
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
        --with-opt-dir
        --without-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=E:/soft/Ruby31-x64/bin/$(RUBY_BASE_NAME)
        --with-openssl-dir
        --without-openssl-dir
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysql-config
        --without-mysql-config
        --with-mysqlclient-dir
        --without-mysqlclient-dir
        --with-mysqlclient-include
        --without-mysqlclient-include=${mysqlclient-dir}/include
        --with-mysqlclient-lib
        --without-mysqlclient-lib=${mysqlclient-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib
E:/soft/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `block in find_library':
undefined method `split' for nil:NilClass (NoMethodError)

    paths = paths.flat_map {|path| path.split(File::PATH_SEPARATOR)}
                                       ^^^^^^
        from E:/soft/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `each'
        from E:/soft/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `flat_map'
        from E:/soft/Ruby31-x64/lib/ruby/3.1.0/mkmf.rb:1083:in `find_library'
        from extconf.rb:131:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can
be found here:

E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/extensions/x64-mingw-ucrt/3.1.0/mysql2-0.5.5/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.5 for inspection.
Results logged to
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/extensions/x64-mingw-ucrt/3.1.0/mysql2-0.5.5/gem_make.out

  E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/builder.rb:102:in `run'
E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/ext_conf_builder.rb:28:in
`build'
E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/builder.rb:171:in
`build_extension'
E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/builder.rb:205:in `block in
build_extensions'
  E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/builder.rb:202:in `each'
E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/ext/builder.rb:202:in
`build_extensions'
E:/soft/Ruby31-x64/lib/ruby/3.1.0/rubygems/installer.rb:843:in
`build_extensions'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/rubygems_gem_installer.rb:72:in
`build_extensions'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/rubygems_gem_installer.rb:28:in
`install'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/source/rubygems.rb:200:in
`install'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/installer/gem_installer.rb:54:in
`install'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/installer/gem_installer.rb:16:in
`install_from_spec'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/installer/parallel_installer.rb:155:in
`do_install'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/installer/parallel_installer.rb:146:in
`block in worker_pool'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/worker.rb:62:in
`apply_func'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/worker.rb:57:in
`block in process_queue'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/worker.rb:54:in
`loop'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/worker.rb:54:in
`process_queue'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/worker.rb:90:in
`block (2 levels) in create_threads'

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

In Gemfile:
  mysql2

MySQL Connector Cを使用したが駄目だった

ググってみたところ、MySQL Connector/Cを使う必要があると書いてあったので、それを使ってやってみます。

MySQL をインストールしたとき、MySQL Connector C はインストールされなかったので、改めて公式サイとのダウンロードページからダウンロードします。

mysql-connector-c-6.1.11-winx64.msi をダウンロードしました。

インストーラーの画面に従ってインストールします。

インストールした後、以下のコマンドを実行します。

gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\Program Files\MySQL\MySQL Connector C 6.1"

どうやらmysql2のインストールに成功したようです。

この後、bundle install を実行したところ、エラーは発生しませんでした。

しかし、Redmineのインストールを進めていくと、以下のコマンドでエラーが発生しました。

bundle exec rails generate_secret_token
rails aborted!
Bundler::GemRequireError: There was an error while trying to load the gem 'mysql2'.
Gem Load Error is: Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5.
エラー全文
E:\OneDrive\Project\Apache\htdocs\redmine>bundle exec rails generate_secret_token
rails aborted!
Bundler::GemRequireError: There was an error while trying to load the gem 'mysql2'.
Gem Load Error is: Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5.
Backtrace for gem load error is:
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `block in require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:299:in `load_dependency'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/activesupport-6.1.7/lib/active_support/dependencies.rb:332:in `require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/mysql2-0.5.5/lib/mysql2.rb:36:in `<top (required)>'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:60:in `require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:60:in `block (2 levels) in require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:55:in `each'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:55:in `block in require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:44:in `each'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler/runtime.rb:44:in `require'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/bundler-2.4.6/lib/bundler.rb:195:in `require'
E:/OneDrive/Project/Apache/htdocs/redmine/config/application.rb:18:in `<top (required)>'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `require'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `<top (required)>'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/rake_module.rb:29:in `load'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/rake_module.rb:29:in `load_rakefile'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:710:in `raw_load_rakefile'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:104:in `block in load_rakefile'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:186:in `standard_exception_handling'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/application.rb:103:in `load_rakefile'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-6.1.7/lib/rails/commands/rake/rake_command.rb:20:in `block in perform'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/rake-13.0.6/lib/rake/rake_module.rb:59:in `with_application'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-6.1.7/lib/rails/commands/rake/rake_command.rb:18:in `perform'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-6.1.7/lib/rails/command.rb:50:in `invoke'
E:/soft/Ruby31-x64/lib/ruby/gems/3.1.0/gems/railties-6.1.7/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Bundler Error Backtrace:
E:/OneDrive/Project/Apache/htdocs/redmine/config/application.rb:18:in `<top (required)>'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `require'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'

Caused by:
Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5.
E:/OneDrive/Project/Apache/htdocs/redmine/config/application.rb:18:in `<top (required)>'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `require'
E:/OneDrive/Project/Apache/htdocs/redmine/Rakefile:5:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
(See full trace by running task with --trace)

MySQLのバージョンがあってないということを言われました。10.5.5 とか表示されてよくわかりません。

Ruby の中のライブラリを使用したら成功した

さらにぐぐっていくと、Rubyフォルダのmsys64/nubgw64 を参照すればできるとのこと。

以下のコマンドを実行します。先ほど作ったmysql2はアンインストールします。

gem uninstall mysql2
gem install mysql2 --platform=ruby -- --with-mysql-dir="E:/soft/Ruby31-x64/msys64/mingw64"

どうやら成功したようです。

bundle install、bundle exec rails generate_secret_token でもエラーは発生しませんでした!

最終的に無事Redmineもインストールできました。

まとめ

今回は、mysql2 のインストールに失敗したときの対応を備忘録として書きました。

mysql2は、bundle install 前に、別途コマンドでインストールする必要があります。また、with-mysql-dirにRubyフォルダのmsys64/nubgw64 を指定します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次