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

150

Dans mon gemfile j'ai:

gem 'mysql2'

Ma database.yml est la suivante:

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 couru à la fois bundle updateet bundle installet mes spectacles Gemfile.lock mysql2.

Cependant, lorsque je lance, rake db:migratej'obtiens ceci à la fois sur mon ordinateur et sur le serveur intermédiaire:

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, je l'ai fait bundle clean --forceet j'ai couru bundle installet bundle updateencore et quand je lance gem listje 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 pour le lien).

En attendant, vous pouvez corriger en faisant une mise à niveau vers la version 0.3.18 de mysql2 en ajoutant cette ligne à votre gemfile:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
la source
1
Essayezbundle update mysql2
Pavan
J'ai essayé ça aussi. Ça n'a pas marché. D'après ce que je vois, la mysql2 (0.4.0)dernière version que Ruby Gems prendra et elle est déjà installée.
newUserNameHere
12
Voici la solution: gem 'mysql2', '~> 0.3.18'dans Gemfile.
newUserNameHere
6
Ce n'est pas un bogue avec mysql2, c'est un problème avec l'exigence de l'adaptateur ActiveRecord: github.com/rails/rails/issues/21544 . Ceci est corrigé dans rails master: github.com/rails/rails/commit/…
dcorr
@Pavan Awsome maahn !! _ / _
Varun

Réponses:

50

Juste une autre mise à jour - la solution à la question est correcte.

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

Ce n'est pas un bogue avec mysql2, c'est un problème avec l'exigence de l'adaptateur ActiveRecord: http://github.com/rails/rails/issues/21544 . Ceci est corrigé dans le maître des rails: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

J'ai pu me connecter Rails 4.2.4à la 4-2-stablebranche et la faire fonctionner avec la dernière version mysql2:

entrez la description de l'image ici

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'
Richard Peck
la source
Si la vitesse est une priorité, il était un peu plus rapide de ramener mysql2 à '0.3.20' au lieu d'épingler les rails '4.2.4' pour brancher: '4-2-stable'.
seanriordan08
il est difficile de croire que la gemme mysql a autant de problèmes de bogues radins que postgreSQL T__T
newBike
C'est l'environnement Windows - c'est la même chose avec Imagemagick etc. Vous devez utiliser des dépendances externes, et comme Windows n'a pas de dépôt central pour eux, cela devient délicat
Richard Peck
Et les rails 5?
Richard Peck
@RichardPeck J'ai ce problème avec Rails 5.0.3
garci560
67

Faites simplement:

gem 'mysql2', '~> 0.3.18' ce bijou fonctionne avec rails version 4.x.x

si l'installation, gem 'mysql2', '~> 0.4.0'cela produit une erreur de chargement de gemmes et provoque des problèmes de compatibilité

Kaleem Ullah
la source
Propre, simple et concis. Merci!
Am33d
A travaillé pour moi @kaleem
khalidh
9

Ce problème a été résolu ici: https://github.com/brianmario/mysql2/issues/950

Pour Rails 4.x, veuillez épingler le gem à mysql2 '~> 0.4.0' pour éviter la mise à jour 0.5.x.

Gemfile:

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

Puis cours bundle update rails mysql2

J'utilise actuellement mysql v 8.0.11

Abram
la source
8

La réponse à cette question particulière relative à la date de publication et à la version de Rails utilisée est que le problème est causé par la bundle updatemise à jour de votre version de mysql2 vers 0.4.x qui a 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 mysql2version dans votre gemfile comme suit:

gem 'mysql2', '0.3.20'

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

Joshua F. Rountree
la source
7

Si vous êtes en mesure de mettre à jour votre version de rails, changez votre Gemfile pour cela et cela résoudra le problème sans rétrograder la version de mysql2 gem:

gem 'rails', '4.2.6'
Omac
la source
5

En tant que débutant complet, je ne savais pas comment faire cela, alors j'ai juste fait une vérification d'essai et j'ai finalement fait fonctionner mon serveur, voici comment je l'ai fait fonctionner.

entrez dans le fichier du répertoire de travail ("work") et à partir de là, entrez dans le fichier de l'application que vous avez créée ("sample_app") sur laquelle mysql 2 est installé aller au fichier gem ("Gemfile") éditer le gem 'mysql2' en gem 'mysql2', '~> 0.3.18'

maintenant revenez à cmd et exécutez la commande "bundle install".

donc le répertoire pour éditer le fichier en tenant compte des fichiers ci-dessus entre crochets devrait être. "c \ work \ sample_app \ Gemfile"

j'espère que j'ai été d'une certaine aide.

avinash vp
la source
4

Cela se produit généralement lorsque vous manquez des paquets mysql sur votre machine. Avez-vous des erreurs gem install mysql2? Sur quel OS travaillez-vous?

Si sur debian ou ubuntu, essayez sudo apt-get install libmysqlclient-dev.

Assurez-vous également que la gemme n'est pas placée dans une groupdéclaration de votre Gemfile.

Le F
la source
+1 pour l'aide. Cependant, j'ai déjà libmysqlclient-dev, et le gem n'est pas dans une déclaration de groupe. Ce qui est étrange, c'est que cela fonctionne bien sur mes autres projets, mais pas sur celui-ci. Ce n'est pas non plus une nouvelle installation de mon système d'exploitation, je n'ai rien changé à mon environnement depuis un certain temps. Et il en va de même pour le serveur intermédiaire, où je vois également les mêmes problèmes.
newUserNameHere
1

J'ai eu le même problème mais l'ajout source 'https://rubygems.org'au début du fichier gem a résolu le problème.

Pas:

ajouter source 'https://rubygems.org'à votre fichier gem. Commentez mysql2 gemet ajoutez gem 'mysql2', '~> 0.3.18' Runbundle install

Mr94
la source
0

essaye ça:

bundle update mysql2

cette commande mettra à jour votre gem 'mysql2' avec la dernière version (devrait être 0.3.17 ou plus) et démarrera votre serveur rails.

mmike
la source