Rails 4 - Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded

Ruby on-RailsRuby on-Rails-4Ruby on-Rails-4.1Mysql2Ruby on-Rails-4.2

Ruby on-Rails Problem Overview


In my gemfile I have:

gem 'mysql2'

My database.yml is as follows:

default: &default
  adapter: mysql2
  database: <%= ENV['db_name'] %>
  username: <%= ENV['db_user'] %>
  password: <%= ENV['db_pass'] %>
  host:     <%= ENV['db_host'] %>
  pool: 32
  socket:   <%= ENV['socket'] %>

development:
  <<: *default

production:
  <<: *default

I've run both bundle update and bundle install and my Gemfile.lock shows mysql2.

However when I run rake db:migrate I get this on both my computer and on the staging server:

myproject.com(master)$ rake db:migrate
WARNING: Use strings for Figaro configuration. 10000012508 was converted to "10000012508".
WARNING: Use strings for Figaro configuration. 860526407370038 was converted to "860526407370038".
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
.....

Just to make sure there wasn't a bad version of mysql2 or something, I did bundle clean --force and ran bundle install and bundle update again and when I run gem list I see mysql2 (0.4.0) and no other versions.

Any ideas would be most appreciated.


SOLUTION

It's currently an issue with Rails 4.1.x and 4.2.x, per this bug report, it will be fixed in the next release of rails 4.2.x (credit to dcorr in comments for the link).

In the mean time you can fix by doing downgraded to version 0.3.18 of mysql2 by adding this line to your gemfile:

gem 'mysql2', '~> 0.3.18'

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

Just do:

gem 'mysql2', '~> 0.3.18' this gem works with rails version 4.x.x

if install gem 'mysql2', '~> 0.4.0' it produces gem load error and causes compatibility issues

Solution 2 - Ruby on-Rails

Just a further update - the solution in the question is correct.

The 4th comment is worth taking note of:

> This isn't a bug with mysql2, it's a problem with the requirement in > the ActiveRecord adapter: http://github.com/rails/rails/issues/21544. > This is fixed in rails master: > https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

I was able to tie Rails 4.2.4 to the 4-2-stable branch and get it working with the latest mysql2:

enter image description here

gem 'rails', '~> 4.2.4', git: "git://github.com/rails/rails.git", branch: '4-2-stable'
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] #-> Rails 4.1+

#DB
gem 'mysql2'

Solution 3 - Ruby on-Rails

This issue was addressed here: https://github.com/brianmario/mysql2/issues/950

> For Rails 4.x please pin the gem to mysql2 '~> 0.4.0' to avoid the 0.5.x upgrade.

Gemfile:

gem 'rails', '4.2.8'
gem 'mysql2', '~> 0.4.0'

Then run bundle update rails mysql2

I am currently using mysql v 8.0.11

Solution 4 - Ruby on-Rails

The answer to this particular question relative to when it was posted and the version of Rails being used is that the problem is caused from doing a bundle update and your mysql2 version updates to 0.4.x which has an incompatibility issue with latest Rails ActiveRecord.

Again, please note this is NOT the solution for people using older versions of Rails / ActiveRecord.

The quick solution is to simply specify the mysql2 version in your gemfile as follows:

gem 'mysql2', '0.3.20'

The long solution would be to wait for either an update to ActiveRecord or something in mysql2 to change.

Solution 5 - Ruby on-Rails

If you are able to upgrade your rails version, then change your Gemfile to this and it will solve the problem without downgrading the mysql2 gem version:

gem 'rails', '4.2.6'

Solution 6 - Ruby on-Rails

As a complete beginner i got confused on how to do this so I just did a trial check and finally got my server working , here is how i got it working .

get into the file of working directory("work") and from there get into the file of the app you created("sample_app")which has mysql 2 installed go to gem file ("Gemfile")edit gem 'mysql2' to gem 'mysql2', '~> 0.3.18'

now go back to cmd and run command "bundle install".

so the directory to edit file taking consideration of above files in brackets should be . "c\work\sample_app\Gemfile"

hope i was of some help .

Solution 7 - Ruby on-Rails

This usually happens when you are missing some mysql packages on your machine. Do you get any errors from gem install mysql2? What OS are you working on?

If on debian or ubuntu try sudo apt-get install libmysqlclient-dev.

Also make sure that the gem is not placed inside a group statement in your Gemfile.

Solution 8 - Ruby on-Rails

Had same issue but adding source 'https://rubygems.org' to the top of gem file solved issue.

Steps:

add source 'https://rubygems.org' to your gem file. Comment out mysql2 gem and add gem 'mysql2', '~> 0.3.18' Run bundle install

Solution 9 - Ruby on-Rails

try this:

bundle update mysql2

this command will update your 'mysql2' gem to the latest version (should be 0.3.17 or higher) and start your rails server.

Solution 10 - Ruby on-Rails

gem 'rails', '4.2.11.3'
gem 'mysql2', '~> 0.4.0'

Try this. This will remove the mysql2 load error.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnewUserNameHereView Question on Stackoverflow
Solution 1 - Ruby on-RailsKaleem UllahView Answer on Stackoverflow
Solution 2 - Ruby on-RailsRichard PeckView Answer on Stackoverflow
Solution 3 - Ruby on-RailsAbramView Answer on Stackoverflow
Solution 4 - Ruby on-RailsJoshua F. RountreeView Answer on Stackoverflow
Solution 5 - Ruby on-RailsOmacView Answer on Stackoverflow
Solution 6 - Ruby on-Railsavinash v pView Answer on Stackoverflow
Solution 7 - Ruby on-RailsThe FView Answer on Stackoverflow
Solution 8 - Ruby on-RailsMr94View Answer on Stackoverflow
Solution 9 - Ruby on-RailsmmikeView Answer on Stackoverflow
Solution 10 - Ruby on-RailsNithinView Answer on Stackoverflow