Ruby mysql2 gem скомпилирован для неверной версии клиентской библиотеки mysql - PullRequest
12 голосов
/ 15 ноября 2011

После обновления MySQL до 5.5 с помощью apt-get гем mysql2 перестал работать.

Вот ошибка:

Incorrect MySQL client library version!
This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)

Я попытался переустановить с помощью mysql_config, но это не такпохоже, что-то изменилось ..

gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config

Соответственно, я попытался указать bundle для компиляции mysql2 с помощью mysql-config, но все равно ошибка остается ..

bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install

Когда я пыталсястарая версия gem (v0.2.6) консоль rails открывается, но вылетает, когда я запускаю любой тип запроса.


Вот полный стек ошибок при попытке попробовать самую последнюю версию gem mysql2:

[marco@linode:/www] 07:29:00 AM: rails c
/users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `require': Incorrect MySQL client library version! This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `<top (required)>'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
  from /www/config/application.rb:7:in `<top (required)>'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

Редактировать : я удалил все gemspecs mysql2 из кэша, удалил все пакеты, связанные с mysql, через apt-get и заново установил все заново, затем снова попытался установить гем сфлаг mysql-config .. но все это оказалось бесполезным.Ошибка остается.

Редактировать 2 : Как предположил Джон Бачир, я подтвердил, что mysql_config содержит MySQL версии 5.5.

Ответы [ 13 ]

12 голосов
/ 02 августа 2014

Поздно на вечеринку, но я только что сделал

gem uninstall mysql2
gem install mysql2

Путь драгоценного камня был

$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
8 голосов
/ 22 ноября 2011

Я сталкивался с той же ошибкой при использовании Ubuntu Server 11.04 и Percona Server, что я сделал:

заменить /usr/lib/libmysqlclient.so.16.0.0 на /usr/lib/libmysqlclient.so.18.0.0

7 голосов
/ 16 октября 2013

У меня была эта проблема, и мне просто нужно было перекомпилировать камень. Я не знаю, есть ли более программный способ с компоновщиком, но я просто удалил скомпилированный гем и затем перезапустил компоновщик:

$ bundle show mysql2
/usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ rm -rf /usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ bundle
3 голосов
/ 06 августа 2013

Я столкнулся с похожей проблемой:

Неверная версия клиентской библиотеки MySQL!Этот гем был скомпилирован для 5.6.12, но клиентская библиотека - 5.5.28.

И моя версия MySQL на Mac:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using  EditLine wrapper

и гем mysql2, установленный bundle install is mysql2-0.3.13

Я решил эту проблему, просто установив gem mysql2 на более старую версию в Gemfile:

gem 'mysql2', '0.2.6'

Если '0.2.6' не работает для вас,Вы можете попробовать другой старый номер версии.

1 голос
/ 31 мая 2016

если вы знаете программу c, вы можете удалить это сообщение.опустите его.

  1. откройте этот mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c

  2. найдите «Этот камень был скомпилирован для», удалите его, если предложение.

    if (lib[i] != MYSQL_SERVER_VERSION[i]) { Line 1897: rb_raise(rb_eRuntimeError, "Incorrect MySQL client library version! This gem was compiled for %s but the client library is %s.", MYSQL_SERVER_VERSION, lib); }
    

вам нужно установить sys-переменную для локальной установки gemfile в системе Windows.SET HOMEDRIVE = c: ОШИБКА: во время выполнения gem ... (Errno :: EINVAL) Неверный аргумент @ rb_file_s_stat - U: /

установить локальный файл gem.C: \ Rails> gem install --local mysql-2.9.1.gem --install-dir = c: / tmp --platform = ruby ​​- --with-mysql-dir = C: / Rails / mysql-connector-c mysql-connector-c посетить mysql http://dev.mysql.com/downloads/connector/c/.вам все равно версия.

попробуйте еще раз.требуется 'mysql'

1 голос
/ 03 апреля 2015

Я попробовал все ответы выше, и мой последний подход был довольно прост - удалите весь стек гемов и переустановите все.Это наконец обошло проблему клиента mysql.т.е.

rm -rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
комплект установки

1 голос
/ 09 октября 2013

Помимо проверки того, что была установлена ​​только библиотека libmysqlclient18 (а не 16), мне удалось установить libmysqlclient18-dev (заголовки dev).

Это с Percona Server 5.5 в Ubuntu Precise.

1 голос
/ 12 сентября 2013

Я снова сталкиваюсь с этой проблемой и не могу решить ее предыдущим методом (используйте более старую версию mysql2 gem).Поэтому в качестве этого шага я попробую другой метод:

1.find, от которого зависит mysql_config, от которого зависит ваша библиотека gem.

mysql_config отличается на машине разных людей, и на одной машине людей может быть несколько mysql_config, поэтому не существует стандартного пути mysql_config для всех.Как этот вопрос, например, версия mysql_config "5.1.58", так что вы можете найти файл "mysql" в корне, чтобы найти, который связан с "5.1.58":

cd /

sudo find -name "mysql" ./

2.installБиблиотека gem mysql2 снова с определенным путем поиска mysql_config в шаге 1

gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
1 голос
/ 14 апреля 2012

Вместо того, чтобы перемещать библиотечные файлы, вы также можете проверить список пакетов для вашей системы - если вы обновились до 5.5 с помощью apt-get, вполне вероятно, что у вас все еще есть библиотеки 5.1, которые вам больше не нужны , Например, в системе, где мы столкнулись с подобной проблемой, у нас все еще была библиотека 5.1:

$ sudo dpkg -l | grep mysql
ii  libmysqlclient-dev               5.5.13-rel20.4-136.lucid                 Percona Server database development files
ii  libmysqlclient16                 5.1.61-rel13.2-431.lucid                 Percona Server database client library
ii  libmysqlclient18                 5.5.13-rel20.4-136.lucid                 Percona Server database client library

Вместо того, чтобы копировать библиотеку 5.5 поверх библиотеки 5.1, вы можете удалить ее:

$ sudo apt-get remove libmysqlclient16

Для нас это было более надежно, чем решение по переименованию библиотек, предложенное ранее.

0 голосов
/ 08 августа 2017

Переустановите libmysqlclient-dev с apt remove libmysqlclient-dev && apt install libmysqlclient-dev исправлено для меня

...