web-dev-qa-db-fra.com

Rails 4 - Gem :: LoadError: 'mysql2' spécifié pour l'adaptateur de base de données, mais la gem n'est pas chargée

Dans mon gemfile j'ai:

gem 'mysql2'

Mon database.yml est comme suit:

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

J'ai exécuté à la fois bundle update et bundle install et mon Gemfile.lock montre mysql2.

Cependant, lorsque je lance rake db:migrate, je l’obtiens à la fois sur mon ordinateur et sur le serveur de transfert:

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).
.....

Juste pour m'assurer qu'il n'y avait pas une mauvaise version de mysql2 ou quelque chose du genre, j'ai bundle clean --force et exécuté bundle install et bundle update encore et quand j'exécute gem list, je vois mysql2 (0.4.0) et aucune autre version.

Toutes les idées seraient très appréciées.


SOLUTION

C'est actuellement un problème avec Rails 4.1.x et 4.2.x, d'après ce rapport de bogue , il sera corrigé dans la prochaine version de Rails 4.2.x (crédit à dcorr dans les commentaires du lien).

En attendant, vous pouvez résoudre le problème en faisant passer la version 0.3.18 de mysql2 en ajoutant cette ligne à votre fichier gem:

gem 'mysql2', '~> 0.3.18'
148
newUserNameHere

Juste une mise à jour supplémentaire - la solution à la question est correcte.

Le 4ème commentaire mérite d'être noté:

Ce n'est pas un bug avec mysql2, c'est un problème avec l'exigence dans l'adaptateur ActiveRecord: http://github.com/Rails/rails/issues/21544 . Ceci est corrigé dans Rails master: https://github.com/Rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

J'ai pu lier Rails 4.2.4 à la branche 4-2-stable et le faire fonctionner avec le dernier 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'
47
Richard Peck

Il suffit de faire:

gem 'mysql2', '~> 0.3.18' cette gemme fonctionne avec Rails version 4.x.x

si install gem 'mysql2', '~> 0.4.0', cela produira une erreur de chargement de gem et causera des problèmes de compatibilité

66
Kaleem Ullah

La réponse à cette question particulière par rapport au moment où elle a été publiée et à la version de Rails utilisée est que le problème provient de l'exécution d'un bundle update et que votre version de mysql2 est mise à jour à la version 0.4.x, ce qui pose un problème d'incompatibilité avec le dernier Rails ActiveRecord.

Encore une fois, veuillez noter que ce n'est pas la solution pour les personnes utilisant des versions plus anciennes de Rails/ActiveRecord.

La solution rapide consiste simplement à spécifier la version mysql2 dans votre fichier gem comme suit:

gem 'mysql2', '0.3.20'

La solution longue serait d'attendre une mise à jour de ActiveRecord ou quelque chose à changer dans mysql2.

8
Joshua F. Rountree

Si vous parvenez à mettre à niveau votre version de Rails, changez alors votre Gemfile pour résoudre le problème sans rétrograder la version de mysql2:

gem 'Rails', '4.2.6'
7
Omac

Cette question a été abordée ici: https://github.com/brianmario/mysql2/issues/950

Pour Rails 4.x, épinglez la gemme sur mysql2 '~> 0.4.0' pour éviter la mise à niveau 0.5.x.

Gemfile:

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

Puis lancez bundle update Rails mysql2

J'utilise actuellement mysql v 8.0.11

5
Abram

Cela se produit généralement quand il manque des paquets mysql sur votre machine. Avez-vous des erreurs de gem install mysql2? Sur quel système d'exploitation travaillez-vous? 

Si vous utilisez Debian ou Ubuntu, essayez Sudo apt-get install libmysqlclient-dev.

Assurez-vous également que la gemme n'est pas placée dans une instruction group dans votre Gemfile.

4
The F

Avait le même problème, mais en ajoutant source 'https://rubygems.org' au sommet du problème résolu du fichier gem.

Pas:

ajoutez source 'https://rubygems.org' à votre fichier gem. Commentez mysql2 gem et ajoutez gem 'mysql2', '~> 0.3.18' Exécutez bundle install

1
Mr94

essaye ça:

bundle update mysql2

cette commande mettra à jour votre gem 'mysql2' vers la dernière version (devrait être 0.3.17 ou supérieure) et démarrera votre serveur Rails.

0
mmike