Rails 4 - Gem :: LoadError: Określono 'mysql2' dla adaptera bazy danych, ale gem nie został załadowany

150

W moim pliku gemfile mam:

gem 'mysql2'

Moja baza danych.yml wygląda następująco:

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

Zabrakło mi zarówno bundle updatea bundle installi moje pokazy Gemfile.lock mysql2.

Jednak po uruchomieniu rake db:migrateotrzymuję ten komunikat zarówno na moim komputerze, jak i na serwerze przejściowym:

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

Aby upewnić się, że nie ma złej wersji mysql2 lub czegoś podobnego, zrobiłem bundle clean --forcei biegałem bundle installi bundle updateznowu, a kiedy uruchamiam gem list, widzę mysql2 (0.4.0)i nie ma innych wersji.

Wszelkie pomysły będą mile widziane.


ROZWIĄZANIE

Obecnie jest to problem z Railsami 4.1.xi 4.2.x, zgodnie z tym zgłoszeniem błędu , zostanie on naprawiony w następnej wersji rails 4.2.x (autorstwo dcorr w komentarzach do linku).

W międzyczasie możesz to naprawić, przechodząc do wersji 0.3.18 mysql2, dodając ten wiersz do pliku gemfile:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
źródło
1
Spróbujbundle update mysql2
Pavan
Ja też tego próbowałem. Nie udało się. Z tego co widzę, mysql2 (0.4.0)to najnowsza wersja Ruby Gems bierze i jest już zainstalowana.
newUserNameHere
12
Oto rozwiązanie: gem 'mysql2', '~> 0.3.18'w Gemfile.
newUserNameHere
6
To nie jest błąd w mysql2, to problem z wymaganiem w adapterze ActiveRecord: github.com/rails/rails/issues/21544 . Naprawiono to w szynach master: github.com/rails/rails/commit/ ...
dcorr
@Pavan Awsome maahn !! _ / _
Varun

Odpowiedzi:

50

Jeszcze tylko aktualizacja - rozwiązanie w pytaniu jest poprawne.

Warto zwrócić uwagę na czwarty komentarz:

To nie jest błąd w mysql2, to problem z wymaganiem w adapterze ActiveRecord: http://github.com/rails/rails/issues/21544 . Jest to naprawione w mistrzu szyn: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Udało mi się powiązać Rails 4.2.4z 4-2-stableoddziałem i uruchomić go z najnowszymi mysql2:

wprowadź opis obrazu tutaj

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
źródło
Jeśli priorytetem jest szybkość, nieco szybciej było zbijanie mysql2 do „0.3.20” zamiast przypinania szyn „4.2.4” do gałęzi: „4-2-stabilna”.
seanriordan08
trudno uwierzyć, że klejnot mysql ma tak wiele skąpych problemów z błędami w porównaniu z postgreSQL T__T
newBike
To środowisko Windows - tak samo jest z Imagemagick itp. Musisz używać zewnętrznych zależności, a ponieważ Windows nie ma dla nich centralnego repozytorium, robi się to trudne
Richard Peck
A co z Railsami 5?
Richard Peck,
@RichardPeck Mam ten problem z Railsami 5.0.3
garci560
67

Po prostu zrób:

gem 'mysql2', '~> 0.3.18' ten klejnot działa rails version 4.x.x

jeśli zostanie zainstalowana gem 'mysql2', '~> 0.4.0', generuje błąd ładowania gem i powoduje problemy ze zgodnością

Kaleem Ullah
źródło
Czyste, proste i zwięzłe. Dzięki!
Am33d
Pracował dla mnie @kaleem
khalidh
9

Ten problem został rozwiązany tutaj: https://github.com/brianmario/mysql2/issues/950

W przypadku Rails 4.x proszę przypiąć gem do mysql2 '~> 0.4.0', aby uniknąć aktualizacji 0.5.x.

Gemfile:

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

Następnie uruchomić bundle update rails mysql2

Obecnie używam mysql w wersji 8.0.11

Abram
źródło
8

Odpowiedź na to konkretne pytanie w odniesieniu do czasu publikacji i używanej wersji Railsów jest taka, że ​​problem jest spowodowany wykonaniem a, bundle updatea twoja wersja mysql2 została zaktualizowana do 0.4.x, która ma problem z niekompatybilnością z najnowszym ActiveRecord Railsów.

Ponownie, proszę zauważyć, że NIE jest to rozwiązanie dla osób używających starszych wersji Rails / ActiveRecord.

Szybkim rozwiązaniem jest po prostu określenie mysql2wersji w pliku gem w następujący sposób:

gem 'mysql2', '0.3.20'

Długim rozwiązaniem byłoby zaczekanie na aktualizację ActiveRecord lub zmianę w mysql2.

Joshua F. Rountree
źródło
7

Jeśli możesz zaktualizować swoją wersję rails, zmień plik Gemfile na ten, a to rozwiąże problem bez obniżania wersji gem mysql2:

gem 'rails', '4.2.6'
Omac
źródło
5

Jako kompletny początkujący nie wiedziałem, jak to zrobić, więc po prostu wykonałem test próbny i wreszcie uruchomiłem serwer, oto jak go uruchomiłem.

wejdź do pliku katalogu roboczego („work”), a stamtąd do pliku utworzonej aplikacji („sample_app”), która ma zainstalowaną mysql 2 przejdź do pliku gem („Gemfile”) edytuj gem „mysql2” na gem „mysql2”, „~> 0.3.18”

teraz wróć do cmd i uruchom polecenie „instalacja pakietu”.

więc katalog do edycji pliku uwzględniający powyższe pliki w nawiasach powinien być. „c \ work \ sample_app \ Gemfile”

mam nadzieję, że pomogłem.

avinash vp
źródło
4

Dzieje się tak zwykle, gdy na komputerze brakuje niektórych pakietów mysql. Czy otrzymujesz jakieś błędy gem install mysql2? Na jakim systemie operacyjnym pracujesz?

Jeśli na Debianie lub Ubuntu, spróbuj sudo apt-get install libmysqlclient-dev.

Upewnij się również, że klejnot nie jest umieszczony w groupoświadczeniu w twoim Gemfile.

F
źródło
+1 za pomoc. Jednak mam już libmysqlclient-dev, a klejnot nie znajduje się w instrukcji grupy. Dziwne jest to, że działa dobrze na moich innych projektach, tylko nie na tym. Nie jest to również nowa instalacja mojego systemu operacyjnego. Od jakiegoś czasu nic nie zmieniłem w moim środowisku. To samo dotyczy serwera pomostowego, na którym również widzę te same problemy.
newUserNameHere
1

Miałem ten sam problem, ale dodanie source 'https://rubygems.org'do góry pliku klejnotu rozwiązało problem.

Kroki:

dodaj source 'https://rubygems.org'do swojego pliku gem. Skomentuj mysql2 gemi dodaj gem 'mysql2', '~> 0.3.18' Runbundle install

Mr94
źródło
0

Spróbuj tego:

bundle update mysql2

to polecenie zaktualizuje twój gem „mysql2” do najnowszej wersji (powinna być 0.3.17 lub wyższa) i uruchomi twój serwer rails.

mmike
źródło