mysql2: bundle install fails with Gem::Ext::BuildError
I’m using mysql2 gem with the Gemfile definition as
platforms :ruby do
gem 'mysql2'
gem 'pg', '~> 1.1'
end
But what happens is
bundle install
is interrupted by Gem::Ext::BuildError
.
All logs are as follows.
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/myname/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
/Users/myname/.rbenv/versions/3.0.0/bin/ruby -I /Users/myname/.rbenv/versions/3.0.0/lib/ruby/3.0.0 -r
./siteconf20210305-36402-x7wk07.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for rb_wait_for_single_fd()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... yes
checking for SSL_MODE_PREFERRED in mysql.h... yes
checking for SSL_MODE_REQUIRED in mysql.h... yes
checking for SSL_MODE_VERIFY_CA in mysql.h... yes
checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... yes
checking for MYSQL.net.pvio in mysql.h... no
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
checking for SERVER_QUERY_NO_GOOD_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_NO_INDEX_USED in mysql.h... yes
checking for SERVER_QUERY_WAS_SLOW in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_ON in mysql.h... yes
checking for MYSQL_OPTION_MULTI_STATEMENTS_OFF in mysql.h... yes
checking for my_bool in mysql.h... no
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/8.0.23_1/lib
-----
creating Makefile
current directory: /Users/myname/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/myname/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/ext/mysql2
make "DESTDIR="
compiling client.c
client.c:787:14: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE
(*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-pointer-types]
rb_rescue2(do_send_query, (VALUE)&args, disconnect_and_raise, self, rb_eException, (VALUE)0);
^~~~~~~~~~~~~
/Users/myname/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby/internal/iterator.h:51:25: note: passing argument to parameter here
VALUE rb_rescue2(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE,VALUE),VALUE,...);
^
client.c:795:16: warning: incompatible pointer types passing 'VALUE (void *)' (aka 'unsigned long (void *)') to parameter of type 'VALUE
(*)(VALUE)' (aka 'unsigned long (*)(unsigned long)') [-Wincompatible-pointer-types]
rb_rescue2(do_query, (VALUE)&async_args, disconnect_and_raise, self, rb_eException, (VALUE)0);
^~~~~~~~
/Users/myname/.rbenv/versions/3.0.0/include/ruby-3.0.0/ruby/internal/iterator.h:51:25: note: passing argument to parameter here
VALUE rb_rescue2(VALUE(*)(VALUE),VALUE,VALUE(*)(VALUE,VALUE),VALUE,...);
^
2 warnings generated.
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1
make failed, exit code 2
Gem files will remain installed in /Users/myname/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3 for inspection.
Results logged to /Users/myname/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/extensions/x86_64-darwin-19/3.0.0/mysql2-0.5.3/gem_make.out
An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling.
In Gemfile:
mysql2
Environment
- Bundler version 2.2.3
- ruby 3.0.0p0
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 37 (6 by maintainers)
Folks seem to be mixing instructions for x86 (
/usr/local/Cellar
) and arm64 (for the new M1 macs) (/opt/homebrew/Cellar
) brew installations, as well as different mysql versions.Here’s a one-shot that should work for whichever approach you’ve gone (assuming a single version of mysql installed with
brew
):Though if you are having issues, understanding whether you’re installing M1 native or using the Intel x86 (emulation on new M1 chips, or native on other mac machines) is pretty important, because mixing and matching deps in different architectures won’t work!
This works for me for homebrew, inspired by @junaruga’s link. Adjust version as needed:
This also worked for me:
export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/
and then try to install the gem again.I’ve successfully installed a mysql gem with changed paths
Adapting the suggestions above, this fixed my ability to install mysql2 with Bundler:
The above Setting LIBRARY_PATH didn’t work, but the following settings worked.
This issue helped me. thank you everyone!!
Perhaps this would work then:
Gem
Bundler
Thank you, this is very helpful!
Thank you, worked great. Is possible to modify the gem so future users won’t run into this issue when installing the mysql2 gem?
Thanks, this worked for me.
On Monterey(intel) this worked for me:
Before running the
gem install mysql
I ranmysql --version
and found my version to be8.0.33
rather than8.0.25_1
I tried literally 10+ things and this is the only thing that did it for me!
I can also confirm that the below solution worked for me:
That’s more config options than you need.
--with-mysql-dir
automatically configures both--with-mysql-lib
and--with-mysql-include
, while--with-mysql-config
is mutually-exclusive with the path-based configuration options.In other words:
OR
OR
On Monteray (12.1 M1 Max chip) I also had to add openssl to my library path:
I tried several ways and was able to solve the problem 🎉
Here are what I did.
I executed
brew update
.I increased the version of ruby.
gem install mysql2
the way shared by @junaruga and tried by @MatthiasWinkelmann and @Neodelf .NOTE: paths are changed
At this point, I don’t know which the direct solution is. This is just a quick note. 🙏🏻
I ran into this on a new mac m1. Fresh install of homebrew, rbenv, ruby 2.5.1
Setting LIBRARY_PATH did not work for me, however, passing the MySQL directories as specified by @MatthiasWinkelmann did work.
This was partly the solution for me. But as @letired mentioned above
brew --prefix zstd
returns
/usr/local/opt/zstd
which is not valid location where openssl is installed. Instead, I have to user this
export LIBRARY_PATH=/usr/local/Cellar/openssl@1.1/1.1.1l_1/lib
After exporting LIBRARY_PATH, bundle install works as a charm. The solution with specifying options to
gem install mysql2
also works, but that does not solve the issue in the right way.Thanks everyone!