brianmario / mysql2

A modern, simple and very fast Mysql library for Ruby - binding to libmysql
http://github.com/brianmario/mysql2
MIT License
2.24k stars 550 forks source link

There is a problem when setting up Redmine and using bundle install to install mysql2 0.5.6 #1366

Open BraveWhite opened 4 months ago

BraveWhite commented 4 months ago

I have a problem when using bundle to install mysql2 0.5.6 My Ruby is "ruby 3.2.4 (2024-04-23 revision af471c0e01) [x64-mingw-ucrt]"

C:\Users\XXXX\Desktop\redmine-5.1.2>bundle install Fetching gem metadata from https://rubygems.org/......... Fetching mysql2 0.5.6 Installing mysql2 0.5.6 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/mysql2-0.5.6/ext/mysql2 C:/Ruby32-x64/bin/ruby.exe 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=C:/Ruby32-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 C:/Ruby32-x64/lib/ruby/3.2.0/mkmf.rb:1083:in block in find_library': undefined methodsplit' for nil:NilClass (NoMethodError)

paths = paths.flat_map {|path| path.split(File::PATH_SEPARATOR)}
                                   ^^^^^^
    from C:/Ruby32-x64/lib/ruby/3.2.0/mkmf.rb:1083:in `each'
    from C:/Ruby32-x64/lib/ruby/3.2.0/mkmf.rb:1083:in `flat_map'
    from C:/Ruby32-x64/lib/ruby/3.2.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:

C:/Ruby32-x64/lib/ruby/gems/3.2.0/extensions/x64-mingw-ucrt/3.2.0/mysql2-0.5.6/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/mysql2-0.5.6 for inspection. Results logged to C:/Ruby32-x64/lib/ruby/gems/3.2.0/extensions/x64-mingw-ucrt/3.2.0/mysql2-0.5.6/gem_make.out

C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/builder.rb:119:in run' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/ext_conf_builder.rb:28:inbuild' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/builder.rb:187:in build_extension' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/builder.rb:221:inblock in build_extensions' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:in each' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/ext/builder.rb:218:inbuild_extensions' C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/installer.rb:846:in build_extensions' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/rubygems_gem_installer.rb:72:in build_extensions' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/rubygems_gem_installer.rb:28:in install' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/source/rubygems.rb:202:ininstall' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:54:in install' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/installer/gem_installer.rb:16:in install_from_spec' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:156:in do_install' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/installer/parallel_installer.rb:147:in block in worker_pool' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/worker.rb:62:in apply_func' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/worker.rb:57:inblock in process_queue' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/worker.rb:54:in loop' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/worker.rb:54:inprocess_queue' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/worker.rb:90:in `block (2 levels) in create_threads'

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

In Gemfile: mysql2

If I use gem install mysql2 --platform=ruby -- --with-mysql-lib="C:\Program Files\MySQL\Connector C++ 8.0\lib64"

C:\Users\XXXX\Desktop\redmine-5.1.2>gem install mysql2 --platform=ruby -- --with-mysql-lib="C:\Program Files\MySQL\Connector C++ 8.0\lib64" Using msys2 packages: mingw-w64-ucrt-x86_64-libmariadbclient Building native extensions with: '--with-mysql-lib=C:\Program Files\MySQL\Connector C++ 8.0\lib64' This could take a while... Successfully installed mysql2-0.5.6 Parsing documentation for mysql2-0.5.6 Installing ri documentation for mysql2-0.5.6 Done installing documentation for mysql2 after 0 seconds 1 gem installed

It can work

But it will show

C:\Users\XXXX\Desktop\redmine-5.1.2>bundle exec rake generate_secret_token rake aborted! Bundler::GemRequireError: There was an error while trying to load the gem 'mysql2'. (Bundler::GemRequireError) Gem Load Error is: Incorrect MySQL client library version! This gem was compiled for 10.8.8 but the client library is 3.3.8. Backtrace for gem load error is: <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in require' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:inrequire' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.7/lib/active_support/dependencies.rb:332:in block in require' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.7/lib/active_support/dependencies.rb:299:inload_dependency' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/activesupport-6.1.7.7/lib/active_support/dependencies.rb:332:in require' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/mysql2-0.5.6/lib/mysql2.rb:36:in<top (required)>' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:60:in require' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:60:inblock (2 levels) in require' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:55:in each' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:55:inblock in require' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:44:in each' C:/Ruby32-x64/lib/ruby/3.2.0/bundler/runtime.rb:44:inrequire' C:/Ruby32-x64/lib/ruby/3.2.0/bundler.rb:187:in require' C:/Users/BHTRD/Desktop/redmine-5.1.2/config/application.rb:18:in<top (required)>' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in require' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:inrequire' C:/Users/BHTRD/Desktop/redmine-5.1.2/Rakefile:5:in <top (required)>' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/rake_module.rb:29:inload' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/rake_module.rb:29:in load_rakefile' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:740:inraw_load_rakefile' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:126:in block in load_rakefile' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:instandard_exception_handling' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:125:in load_rakefile' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:82:inblock in run' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:214:in standard_exception_handling' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/lib/rake/application.rb:80:inrun' C:/Ruby32-x64/lib/ruby/gems/3.2.0/gems/rake-13.2.1/exe/rake:27:in <top (required)>' C:/Ruby32-x64/bin/rake:32:inload' C:/Ruby32-x64/bin/rake:32:in <main>' Bundler Error Backtrace: C:/Users/BHTRD/Desktop/redmine-5.1.2/config/application.rb:18:in<top (required)>' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in require' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:inrequire' C:/Users/BHTRD/Desktop/redmine-5.1.2/Rakefile:5:in `<top (required)>'

Caused by: Incorrect MySQL client library version! This gem was compiled for 10.8.8 but the client library is 3.3.8. <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in require' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:inrequire' C:/Users/BHTRD/Desktop/redmine-5.1.2/config/application.rb:18:in <top (required)>' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:inrequire' <internal:C:/Ruby32-x64/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:38:in require' C:/Users/BHTRD/Desktop/redmine-5.1.2/Rakefile:5:in<top (required)>' (See full trace by running task with --trace)

How can i Fix it??

jwalkerbg commented 4 months ago

You may try to install mysql2 gem before installing Redmine. In my case, I use MySQL 5.7. The command to install mysql2 is:

gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\Program%20Files\MySQL\MySQL%20Server%205.7\lib" --with-mysql-include="C:\Program%20Files\MySQL\MySQL%20Server%205.7\include" --with-mysql-dir="C:\Program%20Files\MySQL\MySQL%20Server%205.7"'

However, please see https://github.com/brianmario/mysql2/issues/1348 because there is a problem with starting mysql2 gem afterwards. See my comment of how I resolved the problem in my case.

BraveWhite commented 4 months ago

Thank you for your answer I'll try it later