Can't install mysql2 gem on macOS Sierra

23,469

Solution 1

I just had the same problem, tried all of the solutions listed above, then commenced to bang my head against they keyboard for a couple of hours.

I then thought to try and install/reinstall the Xcode Command Line Tools:

xcode-select --install

Once I did that the mysql2 gem installed w/ no problems. I hope that does the trick!

Solution 2

When you install openssl via brew, you should get the following message:

Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries

Generally there are no consequences of this for you. If you build your own software and it requires this formula, you'll need to add to your build variables:

LDFLAGS: -L/usr/local/opt/openssl/lib
CPPFLAGS: -I/usr/local/opt/openssl/include
PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig

You can set these build flags (for the local application) by running the following:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

This worked for me.

See bundler's documentation for more information.

Solution 3

Lots of great answers, I was able to combine them into this:

gem install mysql2 --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

because I was not comfortable with bundle config

Solution 4

I am here to share my fix, since the other answers didn't work.

For my environment, I need MySQL 5.6 so I had to use:

brew install mysql56 instead of brew install mysql

Bundle installing the mysql2 gem kept failing, until:

brew link mysql56

I also ran afterwards:

mysql.server start

The last step might be unnecessary, but just in case.

Solution 5

With Mac OS 10.15 Catalina when I tried Alessandro's fix the gem and extensions could be installed correctly but bundle install failed. What worked was just:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

without the cppflags part.

Share:
23,469
Caio Tarifa
Author by

Caio Tarifa

Updated on July 09, 2022

Comments

  • Caio Tarifa
    Caio Tarifa almost 2 years

    I'm setting up my development environment in the new macOS Sierra .

    First of all, I installed Rbenv, Ruby (2.3.1), Homebrew and so the latest version of MySQL (5.7.15).

    $ brew install mysql
    $ mysql.server start
    

    Ok, MySQL was initialized. Time to install the mysql2 gem...

    $ gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
    

    But it didn't work. 😞


    Building native extensions with: '--with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config'
    This could take a while...
    ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.
    
        current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
    /Users/macuser/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20160921-16853-x1boio.rb extconf.rb --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
    checking for ruby/thread.h... yes
    checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
    checking for rb_thread_blocking_region()... no
    checking for rb_wait_for_single_fd()... yes
    checking for rb_hash_dup()... yes
    checking for rb_intern3()... yes
    -----
    Using mysql_config at /usr/local/Cellar/mysql/5.7.15/bin/mysql_config
    -----
    checking for mysql.h... yes
    checking for errmsg.h... yes
    checking for mysqld_error.h... yes
    -----
    Dont 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/5.7.15/lib
    -----
    creating Makefile
    
    To see why this extension failed to compile, please check the mkmf.log which can be found here:
    
      /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/mkmf.log
    
    current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
    make "DESTDIR=" clean
    
    current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
    make "DESTDIR="
    compiling client.c
    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/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4 for inspection.
    Results logged to /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/gem_make.out
    
  • arthur bryant
    arthur bryant over 7 years
    I encountered the same problem after I update to MacOS Sierra 10.12.1 Thanks!
  • Qasim
    Qasim about 7 years
    After doing this I got a different error: Permission denied @ rb_sysopen. That got fixed by using Sudo: sudo bundle install. Not an ideal solution, but hey, it worked!
  • Nic Cottrell
    Nic Cottrell almost 7 years
    On my 10.12.4 is just says xcode-select: error: command line tools are already installed, use "Software Update" to install updates. Any other way to force reinstall?
  • Cory Ringdahl
    Cory Ringdahl almost 7 years
    Same worked with Percona, though I had to force it: brew link --force percona-server56
  • Naveen Honest Raj K
    Naveen Honest Raj K over 6 years
    This worked for me. It threw me "nil build" warning. I tried bundle install in next line, it worked for me. Thanks man.
  • dft
    dft over 6 years
    Yeah works, thanks for saving me from banging my head for hours more
  • Ray Hunter
    Ray Hunter over 6 years
    Also ran the command xcode-select --install as well and that worked for me.
  • Tallboy
    Tallboy about 5 years
    Thank god... Alessandro, Lady Gaga should do a song about you
  • Amituuush
    Amituuush about 5 years
    I second that ^^
  • MIA
    MIA almost 5 years
    Thank you! I was not comfortable bundle config either.
  • Sathish
    Sathish over 4 years
    response after the command: You are replacing the current local value of build.mysql2, which is currently nil running bundle install after this worked
  • sergey.radov
    sergey.radov over 4 years
    This solution works time-to-time. After 10.14 it refers to App Store.
  • Cokorda Raka
    Cokorda Raka over 4 years
    Thanks. This works for me, without installing xcode.
  • thekingoftruth
    thekingoftruth about 4 years
    This worked for someone I was helping who was on Sierra. My computer, which is on Mojave, worked with cppflags included, however.
  • Fralcon
    Fralcon almost 4 years
    I tried this but it didn't work for me on 10.15 Catalina. See Fed C's fix for what worked.
  • Fralcon
    Fralcon almost 4 years
    @NicCottrell When running brew doctor I saw this message Warning: A newer Command Line Tools release is available. Update them from Software Update in System Preferences or run: softwareupdate --all --install --force If that doesn't show you an update run: sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install
  • David Cook
    David Cook over 2 years
    The clue is provided in mkmf.log: clang: error: unsupported option '--with-cppflags=-I/usr/local/opt/openssl/include'
  • Brad
    Brad over 2 years
    This worked for me, though I had to change to the paths to /usr/local/Cellar/openssl@3/3.0.0_1