Rails 4 - Gem :: LoadError: se especificó 'mysql2' para el adaptador de base de datos, pero la gema no está cargada

150

En mi gemfile tengo:

gem 'mysql2'

Mi database.yml es la siguiente:

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

He corrido tanto bundle updatey bundle installya mis espectáculos Gemfile.lock mysql2.

Sin embargo, cuando ejecuto rake db:migrateobtengo esto tanto en mi computadora como en el servidor provisional:

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

Solo para asegurarme de que no había una mala versión de mysql2 o algo así, lo hice bundle clean --forcey corrí bundle instally bundle updatenuevamente y cuando corro gem listveo mysql2 (0.4.0)y no hay otras versiones.

Cualquier idea sería muy apreciada.


SOLUCIÓN

Actualmente es un problema con Rails 4.1.xy 4.2.x, según este informe de error , se solucionará en la próxima versión de rails 4.2.x (crédito a dcorr en los comentarios para el enlace).

Mientras tanto, puede solucionarlo al actualizar a la versión 0.3.18 de mysql2 agregando esta línea a su archivo de gemas:

gem 'mysql2', '~> 0.3.18'
nuevoUserNameHere
fuente
1
Pruebabundle update mysql2
Pavan
He intentado eso también. No funciono Por lo que veo, mysql2 (0.4.0)es la versión más nueva que tomarán ruby ​​gems y ya está instalada.
newUserNameHere
12
Aquí estaba la solución: gem 'mysql2', '~> 0.3.18'en Gemfile.
newUserNameHere
66
Esto no es un error con mysql2, es un problema con el requisito del adaptador ActiveRecord: github.com/rails/rails/issues/21544 . Esto se soluciona en rails master: github.com/rails/rails/commit/…
dcorr
@Pavan Awsome maahn !! _ / _
Varun

Respuestas:

50

Solo una actualización más: la solución en la pregunta es correcta.

Vale la pena tomar nota del cuarto comentario:

Esto no es un error con mysql2, es un problema con el requisito del adaptador ActiveRecord: http://github.com/rails/rails/issues/21544 . Esto se soluciona en rails master: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Pude vincularme Rails 4.2.4a la 4-2-stablesucursal y hacer que funcionara con lo último mysql2:

ingrese la descripción de la imagen aquí

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
fuente
Si la velocidad es una prioridad, fue un poco más rápido subir mysql2 a '0.3.20' en lugar de fijar los rieles '4.2.4' a la bifurcación: '4-2-estable'.
seanriordan08
es difícil creer que la gema mysql tenga tantos problemas de tacaños comparados con postgreSQL T__T
newBike
Es el entorno de Windows: es lo mismo con Imagemagick, etc. Debe usar dependencias externas, y dado que Windows no tiene un repositorio central para ellos, se vuelve complicado
Richard Peck
¿Qué pasa con Rails 5?
Richard Peck el
@ RichardPeck Tengo este problema con Rails 5.0.3
garci560
67

Solo haz:

gem 'mysql2', '~> 0.3.18' esta gema trabaja con rails version 4.x.x

si instala gem 'mysql2', '~> 0.4.0' produce un error de carga de gemas y causa problemas de compatibilidad

Kaleem Ullah
fuente
Limpio, sencillo y conciso. ¡Gracias!
Am33d
Trabajó para mí @kaleem
khalidh
9

Este problema se abordó aquí: https://github.com/brianmario/mysql2/issues/950

Para Rails 4.x, fije la gema a mysql2 '~> 0.4.0' para evitar la actualización 0.5.x.

Gemfile:

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

Entonces corre bundle update rails mysql2

Actualmente estoy usando mysql v 8.0.11

Abram
fuente
8

La respuesta a esta pregunta en particular en relación con el momento en que se publicó y la versión de Rails utilizada es que el problema se debe a bundle update actualización de su versión de mysql2 a 0.4.x que tiene un problema de incompatibilidad con el último ActiveRecord de Rails.

Nuevamente, tenga en cuenta que esta NO es la solución para las personas que usan versiones anteriores de Rails / ActiveRecord.

La solución rápida es simplemente especificar la mysql2versión en su archivo de gemas de la siguiente manera:

gem 'mysql2', '0.3.20'

La solución larga sería esperar a que cambie una actualización de ActiveRecord o algo en mysql2.

Joshua F. Rountree
fuente
7

Si puede actualizar su versión de rails, cambie su Gemfile a esto y resolverá el problema sin degradar la versión de mysql2 gem:

gem 'rails', '4.2.6'
Omac
fuente
5

Como principiante completo, me confundí sobre cómo hacer esto, así que solo hice una comprobación de prueba y finalmente conseguí que mi servidor funcionara, así es como lo hice funcionar.

ingrese al archivo del directorio de trabajo ("work") y desde allí ingrese al archivo de la aplicación que creó ("sample_app") que tiene instalado mysql 2, vaya al archivo gem ("Gemfile") edite gem 'mysql2' para gem 'mysql2', '~> 0.3.18'

ahora regrese a cmd y ejecute el comando "bundle install".

entonces el directorio para editar el archivo teniendo en cuenta los archivos anteriores entre paréntesis debería ser. "c \ work \ sample_app \ Gemfile"

Espero haber sido de alguna ayuda.

avinash vp
fuente
4

Esto suele suceder cuando faltan algunos paquetes mysql en su máquina. ¿Tienes algún error degem install mysql2 ? ¿En qué sistema operativo estás trabajando?

Si en Debian o Ubuntu intenta sudo apt-get install libmysqlclient-dev .

También asegúrese de que la gema no se coloque dentro de una groupdeclaración en su Gemfile.

La F
fuente
+1 por la asistencia. Sin embargo, ya tengo libmysqlclient-dev, y la gema no está dentro de una declaración de grupo. Lo extraño es que funciona bien en mis otros proyectos, pero no en este. Además, esta no es una instalación nueva de mi sistema operativo. No he cambiado nada en mi entorno desde hace algún tiempo. Y lo mismo ocurre con el servidor de ensayo, donde también veo los mismos problemas.
newUserNameHere
1

Tuve el mismo problema pero agregando source 'https://rubygems.org' a la parte superior del problema resuelto del archivo de gemas.

Pasos:

agregar source 'https://rubygems.org'a su archivo de gemas. Comenta mysql2 gemy agrega gem 'mysql2', '~> 0.3.18' Ejecutarbundle install

Mr94
fuente
0

prueba esto:

bundle update mysql2

este comando actualizará su gema 'mysql2' a la última versión (debe ser 0.3.17 o superior) e iniciará su servidor rails.

mmike
fuente