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 を指定します。
コメント