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

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

gem 'mysql2'

базы данных.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.замок показывает 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.х, за это сообщить об ошибке, он будет исправлен в следующем выпуске rails 4.2.x (кредит dcorr в комментариях к ссылке).

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

gem 'mysql2', '~> 0.3.18'

9 ответов


просто еще одно обновление - решение вопроса является правильным.

4-й комментарий стоит принять к сведению:

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

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

enter image description here

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'

так же:

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

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


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

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

быстрое решение состоит в том, чтобы просто указать mysql2 версия в вашем gemfile как следует:

gem 'mysql2', '0.3.20'

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


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

gem 'rails', '4.2.6'

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

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

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

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

надеюсь, я немного помог .


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

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

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


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

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

Gemfile:

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

затем запустите bundle update rails mysql2

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


была такая же проблема, но при добавлении source 'https://rubygems.org' в верхней части файла Gem решена проблема.

действия:

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


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

bundle update mysql2

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