An error occurred while installing mysql2 (0.4.8), and Bundler cannot continue
Asked Answered
F

13

52

How can I fix this error in ruby on rail.

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.2'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
gem 'mysql 2', '0.4.8'
# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '~> 3.0.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

gem 'spree', '~> 3.2.1'
gem 'spree_auth_devise', github: 'spree/spree_auth_devise'
gem 'spree_gateway', github: 'spree/spree_gateway'
gem 'spree_i18n', github: 'spree-contrib/spree_i18n', branch: 'master'

I ran the 'bundle install' and this error occurred. So to fix the bug of the project, I ran 'gem install mysql2 '0.4.8'' command in console but I can't fix it.

This ruby on rails uses Spree framework.

edit:

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

    current directory: /Users/admin/.rvm/gems/ruby-2.4.1/gems/mysql2-0.4.8/ext/mysql2
/Users/admin/.rvm/rubies/ruby-2.4.1/bin/ruby -r ./siteconf20170803-6579-foq4sg.rb extconf.rb
checking for rb_absint_size()... yes

I ran 'bundle install' but I can't success this command because of this error.

Farcy answered 3/8, 2017 at 3:17 Comment(3)
It'll be useful if you add the bundle error.Schaab
check github.com/bundler/bundler/issues/3372#issuecomment-94488866Actuality
I recommend looking at the mysql2 gem readme first for answers.Dumah
C
120

I think you missing dev library of mysql:

On ubuntu

sudo apt-get install libmysqlclient-dev

On Red Hat/CentOS and other distributions using yum:

sudo yum install mysql-devel

On Mac OS X with Homebrew:

brew install mysql
Carnet answered 3/8, 2017 at 4:32 Comment(7)
Thanks for your answer. On Mac OS, I ran the command 'brew install mysql' and then 'bundle install'. There is no error now.Farcy
Thanks, this saved me much head scratching as I assumed I already had mysql installed.Hydrostatic
It's sudo apt-get install default-libmysqlclient-dev nowNae
i am on mac bigsur but still i am getting error😔Undersexed
The debian/ubuntu package name have been renamed, should use sudo apt-get install libmariadb-dev-compat libmariadb-dev now.Thecla
and on windows?Markettamarkey
Ubuntu solutions worked for me too: "Ubuntu 20.04.5 LTS".Spermophile
V
48

For Mac, I had a problem with openssl issue

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

I fixed this issue use command as below;

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

Console Result:

Fetching mysql2 0.5.2
Installing mysql2 0.5.2 with native extensions
Using puma 3.12.0
Using sprockets 3.7.2
Using sprockets-rails 3.2.1
Fetching rails 5.2.2.1
Installing rails 5.2.2.1
Using rubyzip 1.2.2
Using sass-listen 4.0.0
Using sass 3.7.3
Using tilt 2.0.9
Using sass-rails 5.0.7
Using selenium-webdriver 3.141.0
Using spring 2.0.2
Using spring-watcher-listen 2.0.1
Using turbolinks-source 5.2.0
Using turbolinks 5.2.0
Using uglifier 4.1.20
Using web-console 3.7.0
Bundle complete! 18 Gemfile dependencies, 79 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

Alternative Resolve

if you still have error and got the message in the console that: You are replacing the current local value of build.mysql2, which is currently nil. Please try as below:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Then run:

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

Show result:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

Finally, run bundle install in your project:

$ sudo bundle install

Let me know if it can save your day!!! :)

Vouch answered 14/3, 2019 at 11:8 Comment(2)
This fixed it for me! Thank you kind stranger.Camilia
100% absolutely nothing I have tried has solved the issue for me. Best part is, running gem list yields a number of gems including mysql2 (0.5.2) listed as being installed..... I am going to lose itPayday
B
29

if you are on mac, make sure openSSL is installed first.

brew install openssl

then export

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

make sure you have mysql installed

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

then run bundle

bundle install

I almost lost whats remaining of my hair because I got a new machine and I didnt remember that I had to install openssl.

Brunner answered 18/11, 2019 at 20:27 Comment(3)
I hit this same issue and the above method solved it. However I didn't need to run gem install mysql2 as sudo, so that doesn't seem necessary to get passed the error.Chu
Thanks, saved some hair here 👍Barham
Stupid note: replace the gem version with the one you are intended to install :)Sechrist
T
6

For people who use macOS Monterey (M1 Pro/Max), I found a simple and fast solution:

Copy and past it in your terminal

arch -x86_64 gem install mysql2 -v 0.5.3 -- --srcdir=/usr/local/mysql/include

Now you can run bundle without any MySql errors

Transliterate answered 6/2, 2022 at 10:3 Comment(2)
So easy and simple. It's work for me. Thank alot.Coligny
This worked for me on Sonoma 14.3 M2 Max, thank you!Intercurrent
G
4

MacOS Monterey (M1)

The location of the lib and include files has changed in Homebrew. I used this guidance to set the correct paths for the installation.

I started out by refreshing my Ruby and Rails installation using this procedure. This installs the openssl dependency.

$ export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix [email protected])/lib/

After double checking my mysql install, I had a final hurdle with zstd blocking the build. I fixed this using (credit to this answer):

 bundle config --local build.mysql2 \
   "--with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5.0/lib"

You're now read to run bundle again

 bundle install
Galvano answered 21/11, 2021 at 8:58 Comment(0)
G
4

Using a macOS Monterey too and this worked for me: gem install mysql2 -- --srcdir=/usr/local/mysql/include

Gustaf answered 7/3, 2022 at 12:14 Comment(0)
D
4

The below command will help you out:-

 sudo apt-get install libmysqlclient-dev
Diverticulitis answered 5/9, 2022 at 0:55 Comment(0)
L
2

I found the path to my mysql, which was installed via homebrew and ran the following command:

gem install mysql2 -- \
 --with-mysql-lib=/opt/homebrew/Cellar/mysql/8.0.27/lib \
 --with-mysql-dir=/opt/homebrew/Cellar/mysql/8.0.27 \
 --with-mysql-config=/opt/homebrew/Cellar/mysql/8.0.27/bin/mysql_config \
 --with-mysql-include=/opt/homebrew/Cellar/mysql/8.0.27/include 

Replace the path to your mysql and it should fix the issue.

Longsuffering answered 3/12, 2021 at 0:47 Comment(0)
S
1

I was having similar issue, but for v4.10

Error occurred while installing mysql2 (0.4.10), and Bundler cannot continue

So I had to run the below commands to fix the above issue.

sudo apt-get update
sudo apt-get install build-essential
Sylvia answered 9/11, 2018 at 12:42 Comment(0)
G
1

Ubuntu 18

You may need to install

sudo apt-get install libssl-dev

as in This answer

Gildagildas answered 18/12, 2019 at 15:26 Comment(0)
A
1

In my case on MacOS i had to only:

brew install openssl

and then gem install mysql2 -v '0.5.4' worked

Ailbert answered 20/10, 2022 at 9:1 Comment(0)
Q
1
sudo apt-get install libmysqlclient-dev

The above command worked for me. This is one of the dependencies to install sql2. I was using Ubuntu 22.04 with rails 7.

https://discuss.rubyonrails.org/t/error-occurred-while-installing-mysql2/76210/4

Quinlan answered 9/7, 2023 at 7:27 Comment(0)
B
0

Step 1: You need to install mysql using homebrew:

$ brew install mysql

Step 2: Check the path:

$ brew --prefix mysql

Step 3: Install the gem using this path:

gem install mysql2 -- --with-mysql-dir=/opt/homebrew/opt/mysql
Beuthen answered 12/3 at 10:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.