Rails 4 - Gem :: LoadError: Вказано 'mysql2' для адаптера бази даних, але дорогоцінний камінь не завантажений


150

У своєму гемфілі я маю:

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, згідно з цим звітом про помилку вона буде виправлена ​​у наступному випуску рейки 4.2.x (заслуговуйте на dcorr у коментарях за посиланням).

Тим часом ви можете це виправити, перейшовши на версію 0.3.18 mysql2, додавши цей рядок до вашого gemfile:

gem 'mysql2', '~> 0.3.18'

1
Спробуйтеbundle update mysql2
Pavan

Я також пробував це. Не працювало. Як я бачу, mysql2 (0.4.0)це найновіша версія рубінових дорогоцінних каменів, і вона вже встановлена.
newUserNameHere

12
Тут було рішення: gem 'mysql2', '~> 0.3.18'у Gemfile.
newUserNameHere

6
Це не помилка з mysql2, це проблема з вимогою в адаптері ActiveRecord: github.com/rails/rails/isissue/21544 . Це зафіксовано у майстра рейок: github.com/rails/rails/commit/…
dcorr

@Pavan Awsome maahn !! _ / _
Варун

Відповіді:


50

Просто подальше оновлення - рішення у питанні правильне.

Четвертий коментар варто врахувати:

Це не помилка з mysql2, це проблема з вимогою в адаптері ActiveRecord: http://github.com/rails/rails/isissue/21544 . Це зафіксовано в майстрі рейок: 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-стабільний'.
seanriordan08

важко повірити, що у дорогоцінного каміння mysql є стільки скупих проблем з порівнянням з postgreSQL T__T
newBike

Це середовище Windows - те ж саме з Imagemagick і т. Д. Вам потрібно використовувати зовнішні залежності, і оскільки Windows не має центрального репо для них, це стає складним
Річард Пек,

Що з рейки 5?
Річард Пек

@RichardPeck У мене ця проблема з Rails 5.0.3
garci560

67

Просто зробіть:

gem 'mysql2', '~> 0.3.18' ця дорогоцінний камінь працює з rails version 4.x.x

якщо встановити, gem 'mysql2', '~> 0.4.0'це призводить до помилки завантаження дорогоцінного каміння та викликає проблеми сумісності


Чистий, простий і лаконічний. Дякую!
Am33d

Працював для мене @kaleem
khalidh

9

Це питання було вирішено тут: https://github.com/brianmario/mysql2/isissue/950

Для Rails 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 v 8.0.11


8

Відповідь на цей конкретний питання щодо того, коли він був розміщений та використовуваної версії Rails, полягає в тому, що проблема викликана тим, що bundle updateви працюєте з вашою версією mysql2 та оновлюється до 0,4.x, що має проблему несумісності з останньою Rails ActiveRecord.

Знову зауважте, що це НЕ рішення для людей, які використовують старіші версії Rails / ActiveRecord.

Швидке рішення - просто вказати mysql2версію у вашому gemfile наступним чином:

gem 'mysql2', '0.3.20'

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


7

Якщо ви зможете оновити свою рейкову версію, то змініть свій Gemfile на це, і це вирішить проблему без пониження версії дорогоцінного файлу mysql2:

gem 'rails', '4.2.6'

5

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

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

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

тож має бути каталог для редагування файлів з урахуванням вищезазначених файлів у дужках. "c \ work \ sample_app \ Gemfile"

сподіваюся, що я був у допомозі.


4

Зазвичай це відбувається, коли на вашій машині відсутні деякі пакунки mysql. Ви отримуєте помилки gem install mysql2? Над якою ОС ви працюєте?

Якщо на debian або ubuntu, спробуйте sudo apt-get install libmysqlclient-dev.

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


+1 за допомогу. Однак у мене вже є libmysqlclient-dev, і дорогоцінний камінь не знаходиться в груповій заяві. Що дивно, це те, що він чудово працює на інших моїх проектах, тільки не на цьому. Крім того, це не нова установка моєї ОС, я нічого не змінював у своєму оточенні протягом певного часу. І те саме стосується тактового сервера, де я бачу ті самі проблеми.
newUserNameHere

1

Була source 'https://rubygems.org'така ж проблема, але додавання до вершини вирішеної проблеми з дорогоцінним файлом.

Кроки:

додати source 'https://rubygems.org'у свій дорогоцінний файл. Прокоментуйте коментар mysql2 gemі додайте gem 'mysql2', '~> 0.3.18' Виконатиbundle install


0

спробуйте це:

bundle update mysql2

ця команда оновить ваш «mysql2» дорогоцінний камінь до останньої версії (має бути 0.3.17 або вище) та запустить ваш сервер рейлів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.