Rails 4 - Gem :: LoadError: Указано mysql2 для адаптера базы данных, но гем не загружен

150

В моем gemfile у меня есть:

gem 'mysql2'

Мой database.yml выглядит следующим образом:

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

Я бежал , как bundle updateи bundle installи мое Gemfile.lock шоу mysql2.

Однако, когда я запускаю, rake db:migrateя получаю это как на моем компьютере, так и на промежуточном сервере:

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

Просто чтобы убедиться , что был не плохой вариант mysql2 или что - то, я не сделал , bundle clean --forceи побежал , bundle installи bundle updateснова , и когда я бегу gem listя вижу , mysql2 (0.4.0)и никакие другие версии.

Любые идеи будут наиболее ценными.


РЕШЕНИЕ

В настоящее время это проблема с Rails 4.1.x и 4.2.x, согласно этому отчету об ошибках , она будет исправлена ​​в следующем выпуске rails 4.2.x (благодарность dcorr в комментариях за ссылку).

В то же время вы можете исправить это, выполнив версию mysql2 до версии 0.3.18, добавив следующую строку в свой gemfile:

gem 'mysql2', '~> 0.3.18'
newUserNameHere
источник
1
Попробуйтеbundle update mysql2
Pavan
Я тоже это попробовал. Не сработало Из того, что я вижу, mysql2 (0.4.0)это новейшая версия ruby ​​gems, и она уже установлена.
newUserNameHere
12
Здесь было решение: gem 'mysql2', '~> 0.3.18'в Gemfile.
newUserNameHere
6
Это не ошибка с mysql2, это проблема с требованием в адаптере ActiveRecord: github.com/rails/rails/issues/21544 . Это исправлено в мастер рельсов: github.com/rails/rails/commit/...
dcorr
@Pavan Awsome maahn !! _ / _
Варун

Ответы:

50

Просто дальнейшее обновление - решение в вопросе правильное.

4-й комментарий заслуживает внимания:

Это не ошибка с mysql2, это проблема с требованием в адаптере ActiveRecord: http://github.com/rails/rails/issues/21544 . Это исправлено в мастере rails: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

Я смог привязаться Rails 4.2.4к 4-2-stableветке и заставить ее работать с последними mysql2:

введите описание изображения здесь

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'
Ричард Пек
источник
Если скорость является приоритетом, было немного быстрее понизить mysql2 до '0.3.20' вместо того, чтобы прижимать рельсы '4.2.4' к ответвлению: '4-2-stable'.
seanriordan08
Трудно поверить, что в mysql gem так много скупых ошибок, по сравнению с postgreSQL T__T
newBike
Это среда Windows - то же самое с Imagemagick и т. Д. Вы должны использовать внешние зависимости, и, поскольку у Windows нет центрального репо для них, это становится непросто
Ричард Пек
Что насчет Rails 5?
Ричард Пек,
@RichardPeck У меня есть эта проблема с Rails 5.0.3
garci560
67

Просто сделать:

gem 'mysql2', '~> 0.3.18' этот драгоценный камень работает с rails version 4.x.x

при установке gem 'mysql2', '~> 0.4.0'это выдает ошибку загрузки gem и вызывает проблемы совместимости

Калим Улла
источник
Чисто, просто и лаконично. Спасибо!
Am33d
Работал для меня @kaleem
khalidh
9

Эта проблема была решена здесь: https://github.com/brianmario/mysql2/issues/950

Для Rails 4.x, пожалуйста, прикрепите gem к mysql2 '~> 0.4.0', чтобы избежать обновления 0.5.x.

Gemfile:

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

Тогда беги bundle update rails mysql2

Я в настоящее время использую MySQL v 8.0.11

Аврам
источник
8

Ответ на этот конкретный вопрос относительно того, когда он был опубликован и bundle updateкакая версия Rails используется, заключается в том, что проблема вызвана обновлением версии mysql2 и вашей версии 0.4.x, которая имеет проблему несовместимости с последней версией Rails ActiveRecord.

Опять же, обратите внимание, что это НЕ решение для людей, использующих старые версии Rails / ActiveRecord.

Быстрое решение - просто указать mysql2версию в вашем gemfile следующим образом:

gem 'mysql2', '0.3.20'

Долгое решение - подождать, пока изменится обновление ActiveRecord или что-то в mysql2.

Джошуа Ф. Рантри
источник
7

Если вы можете обновить версию rails, измените Gemfile на этот, и это решит проблему без понижения версии mysql2 gem:

gem 'rails', '4.2.6'
OMAC
источник
5

Как полный новичок, я запутался в том, как это сделать, поэтому я просто проверил пробную проверку и, наконец, запустил свой сервер, вот как я это сделал.

попасть в файл рабочей директории ("работа") и оттуда попасть в файл созданного вами приложения ("sample_app"), в котором установлен mysql 2, перейти в файл gem ("Gemfile") и отредактировать гем "mysql2" в gem 'mysql2', '~> 0.3.18'

Теперь вернитесь к cmd и запустите команду "bundle install".

поэтому каталог для редактирования файла с учетом указанных выше файлов в скобках должен быть. "С \ работа \ sample_app \ Gemfile"

надеюсь, что я был какой-то помощи

авинаш вп
источник
4

Обычно это происходит, когда на вашем компьютере отсутствуют некоторые пакеты mysql. Вы получаете какие-либо ошибки от gem install mysql2? На какой ОС вы работаете?

Если на Debian или Ubuntu попробуйте sudo apt-get install libmysqlclient-dev .

Также убедитесь, что драгоценный камень не находится внутри groupоператора в вашем Gemfile.

F
источник
+1 за помощь. Однако у меня уже есть libmysqlclient-dev, и этот гем не находится внутри оператора группы. Что странно, так это то, что он отлично работает на других моих проектах, но только не на этом. Кроме того, это не новая установка моей ОС. Я некоторое время ничего не менял в своей среде. И то же самое относится и к промежуточному серверу, где я вижу те же проблемы.
newUserNameHere
1

Была та же проблема, но добавление source 'https://rubygems.org' в начало файла gem решило проблему.

шаги:

добавить source 'https://rubygems.org'в свой файл драгоценного камня. Закомментируйте mysql2 gemи добавьте gem 'mysql2', '~> 0.3.18' Runbundle install

Mr94
источник
0

попробуй это:

bundle update mysql2

эта команда обновит ваш драгоценный камень «mysql2» до последней версии (должно быть 0.3.17 или выше) и запустит ваш сервер rails.

mmike
источник