Rails 4 - Gem :: LoadError: 'mysql2' für Datenbankadapter angegeben, aber der Gem wird nicht geladen

150

In meiner Gemfile habe ich:

gem 'mysql2'

Meine database.yml lautet wie folgt:

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

Ich habe beide ausgeführt bundle updateund bundle installund meine Gemfile.lock zeigt mysql2.

Beim Ausführen wird rake db:migratedies jedoch sowohl auf meinem Computer als auch auf dem Staging-Server angezeigt:

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

Nur um sicherzugehen war es keine schlechte Version von mysql2 oder etwas, das habe ich bundle clean --forceund lief bundle installund bundle updateimmer wenn ich laufe gem listich sehe mysql2 (0.4.0)und keine anderen Versionen.

Irgendwelche Ideen wären sehr dankbar.


LÖSUNG

Derzeit handelt es sich um ein Problem mit Rails 4.1.x und 4.2.x. Gemäß diesem Fehlerbericht wird es in der nächsten Version von Rails 4.2.x behoben (Gutschrift an dcorr in den Kommentaren für den Link).

In der Zwischenzeit können Sie das Problem beheben, indem Sie ein Downgrade auf Version 0.3.18 von mysql2 durchführen, indem Sie diese Zeile zu Ihrer Gem-Datei hinzufügen:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
quelle
1
Versuchen Siebundle update mysql2
Pavan
Das habe ich auch versucht. Hat nicht funktioniert. Soweit ich sehe, mysql2 (0.4.0)ist die neueste Version von Ruby Gems und sie ist bereits installiert.
newUserNameHere
12
Hier war die Lösung: gem 'mysql2', '~> 0.3.18'in Gemfile.
newUserNameHere
6
Dies ist kein Fehler in mysql2, sondern ein Problem mit der Anforderung im ActiveRecord-Adapter: github.com/rails/rails/issues/21544 . Dies ist in Rails Master behoben: github.com/rails/rails/commit/…
dcorr
@Pavan Awesome maahn !! _ / _
Varun

Antworten:

50

Nur ein weiteres Update - die Lösung in der Frage ist richtig.

Der 4. Kommentar ist erwähnenswert:

Dies ist kein Fehler bei mysql2, sondern ein Problem mit der Anforderung im ActiveRecord-Adapter: http://github.com/rails/rails/issues/21544 . Dies ist im Rails Master behoben: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Ich konnte mich Rails 4.2.4an die 4-2-stableFiliale binden und sie mit der neuesten Version zum Laufen bringenmysql2 :

Geben Sie hier die Bildbeschreibung ein

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
quelle
Wenn Geschwindigkeit Priorität hat, war es etwas schneller, mysql2 auf '0.3.20' zu bringen, anstatt die Schienen '4.2.4' festzunageln, um zu verzweigen: '4-2-stabil'.
Seanriordan08
Es ist kaum zu glauben, dass MySQL Gem im Vergleich zu PostgreSQL T__T
NewBike
Es ist die Windows-Umgebung - es ist dasselbe mit Imagemagick usw. Sie müssen externe Abhängigkeiten verwenden, und da Windows kein zentrales Repo für sie hat, wird es schwierig
Richard Peck
Was ist mit Rails 5?
Richard Peck
@ RichardPeck Ich habe dieses Problem mit Rails 5.0.3
garci560
67

Mach einfach:

gem 'mysql2', '~> 0.3.18' Dieses Juwel funktioniert mit rails version 4.x.x

Bei der Installation tritt ein gem 'mysql2', '~> 0.4.0'Fehler beim Laden des Gems auf und es treten Kompatibilitätsprobleme auf

Kaleem Ullah
quelle
Sauber, einfach und prägnant. Vielen Dank!
Am33d
Arbeitete für mich @kaleem
khalidh
9

Dieses Problem wurde hier behoben : https://github.com/brianmario/mysql2/issues/950

Für Rails 4.x stecken Sie den Edelstein bitte in mysql2 '~> 0.4.0', um das 0.5.x-Upgrade zu vermeiden.

Gemfile:

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

Dann renne bundle update rails mysql2

Ich verwende derzeit MySQL v 8.0.11

Abram
quelle
8

Die Antwort auf diese spezielle Frage in Bezug auf den Zeitpunkt der Veröffentlichung und die verwendete Version von Rails lautet, dass das Problem durch a verursacht wird bundle update und Ihre mysql2-Version auf 0.4.x aktualisiert wird, was ein Inkompatibilitätsproblem mit dem neuesten Rails ActiveRecord aufweist.

Bitte beachten Sie auch hier, dass dies NICHT die Lösung für Benutzer ist, die ältere Versionen von Rails / ActiveRecord verwenden.

Die schnelle Lösung besteht darin, die mysql2Version in Ihrer Gemfile einfach wie folgt anzugeben :

gem 'mysql2', '0.3.20'

Die lange Lösung wäre, darauf zu warten, dass sich entweder ein Update auf ActiveRecord oder etwas in mysql2 ändert.

Joshua F. Rountree
quelle
7

Wenn Sie in der Lage sind, Ihre Rails-Version zu aktualisieren, ändern Sie Ihr Gemfile in dieses und es wird das Problem lösen, ohne die mysql2-Gem-Version herunterzustufen:

gem 'rails', '4.2.6'
Omac
quelle
5

Als Anfänger war ich verwirrt darüber, wie das geht, also habe ich nur eine Testprüfung durchgeführt und schließlich meinen Server zum Laufen gebracht. Hier ist, wie ich ihn zum Laufen gebracht habe.

Gehen Sie in die Datei des Arbeitsverzeichnisses ("work") und von dort in die Datei der von Ihnen erstellten App ("sample_app"), in der mysql 2 installiert ist. Gehen Sie zur gem-Datei ("Gemfile") und bearbeiten Sie gem 'mysql2' zu gem 'mysql2', '~> 0.3.18'

Gehen Sie nun zurück zu cmd und führen Sie den Befehl "bundle install" aus.

Daher sollte das Verzeichnis zum Bearbeiten der Datei unter Berücksichtigung der oben genannten Dateien in Klammern sein. "c \ work \ sample_app \ Gemfile"

Ich hoffe, ich war etwas hilfreich.

avinash vp
quelle
4

Dies geschieht normalerweise, wenn Sie einige MySQL-Pakete auf Ihrem Computer vermissen. Erhalten Sie Fehler vongem install mysql2 ? An welchem ​​Betriebssystem arbeiten Sie?

Wenn auf Debian oder Ubuntu versuchen sudo apt-get install libmysqlclient-dev .

groupStellen Sie außerdem sicher, dass der Edelstein nicht in einer Anweisung in Ihrer Gemfile enthalten ist.

Die F.
quelle
+1 für die Unterstützung. Ich habe jedoch bereits libmysqlclient-dev und der Edelstein befindet sich nicht in einer Gruppenanweisung. Was seltsam ist, dass es bei meinen anderen Projekten gut funktioniert, nur nicht bei diesem. Auch dies ist keine Neuinstallation meines Betriebssystems. Ich habe seit einiger Zeit nichts an meiner Umgebung geändert. Gleiches gilt für den Staging-Server, auf dem auch die gleichen Probleme auftreten.
newUserNameHere
1

Hatte das gleiche Problem, aber das Hinzufügen source 'https://rubygems.org'zum oberen Rand der Gem-Datei löste das Problem.

Schritte:

füge source 'https://rubygems.org'es deiner Edelsteindatei hinzu. Auskommentieren mysql2 gemund gem 'mysql2', '~> 0.3.18' Run hinzufügenbundle install

Mr94
quelle
0

Versuche dies:

bundle update mysql2

Dieser Befehl aktualisiert Ihr 'mysql2'-Juwel auf die neueste Version (sollte 0.3.17 oder höher sein) und startet Ihren Rails-Server.

mmike
quelle