Ответ 1
Я столкнулся с той же ошибкой при использовании Ubuntu Server 11.04 и Percona Server, что я сделал:
замените /usr/lib/libmysqlclient.so.16.0.0
на /usr/lib/libmysqlclient.so.18.0.0
После обновления 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
Соответственно, я попробовал рассказать пакет для компиляции mysql2 с помощью mysql-config, но все же ошибка остается.
bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install
Когда я попробовал более старую версию gem (v0.2.6), консоль rails открывается, но падает после запуска любого типа запроса.
Здесь полный стек ошибок при попытке самой последней версии глагола mysql2:
[[email protected]:/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>'
Изменить. Я удалил все mysql2 gemspecs из кеша, удалил все связанные с mysql пакеты через apt-get и снова установил все заново, а затем снова попытался установить драгоценный камень с флагом mysql-config. но все это оказалось бесполезным. Ошибка остается.
Изменить 2. Как было предложено Джоном Бачиром, я подтвердил, что mysql_config содержит MySQL версии 5.5.
Я столкнулся с той же ошибкой при использовании Ubuntu Server 11.04 и Percona Server, что я сделал:
замените /usr/lib/libmysqlclient.so.16.0.0
на /usr/lib/libmysqlclient.so.18.0.0
Поздно к вечеринке, но я просто сделал
gem uninstall mysql2
gem install mysql2
Путь Gem был
$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
У меня была эта проблема, и мне просто нужно было перекомпилировать драгоценный камень. Я не знаю, есть ли более программный путь с bundler, но я только что удалил скомпилированную жемчужину, а затем повторно запустил bundler:
$ 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
Я столкнулся с аналогичной проблемой:
Неверная версия клиентской библиотеки 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
а gem mysql2, установленный bundle install
, - mysql2-0.3.13
Я решил эту проблему, просто установив gem mysql2 в более старую версию в Gemfile:
gem 'mysql2', '0.2.6'
Если '0.2.6'
не работает для вас, вы можете попробовать другой номер старой версии.
Вместо того, чтобы перемещать файлы библиотеки, вы также можете проверить список пакетов для своей системы - если вы обновили до 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
Для нас это было более надежным, чем предлагаемое ранее решение переименования библиотеки.
Я снова встречаюсь с этой проблемой, и я не мог решить ее с помощью моего предыдущего метода (используйте более раннюю версию 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. Снова верните библиотеку mysql2 gem с помощью определенного пути mysql_config find на шаге 1
gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
Кроме того, чтобы убедиться, что была установлена только библиотека libmysqlclient18
(а не 16), то, что заставило ее работать, была установка libmysqlclient18-dev
(заголовки dev).
Это с Percona Server 5.5 на Ubuntu Precise.
Я попробовал все ответы выше, и мой окончательный подход был довольно прост - удалите весь собранный комплект драгоценных камней и переустановите все. Это, наконец, обострило проблему клиента mysql. то есть.
rm -rf/Users/sjohnson/.rvm/gems/[email protected]_rails3
комплект поставки
если вы знаете программу c, вы можете удалить это сообщение. опустите его.
откройте этот mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c
найдите "Этот камень был скомпилирован для", удалите это предложение.
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: ERROR: при выполнении 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 -с mysql-connector-c посещать mysql http://dev.mysql.com/downloads/connector/c/. вам не нужна версия.
Повторите попытку. require 'mysql'
Убедитесь, что /usr/bin/mysql_config
действительно тот, который поставляется с 5.5.
В моем случае у меня были разные файлы из libmysqlclient15 (датирован 2009) и libmysqlclient16 (датировано 20012), оставленные в /usr/lib, возможно, из-за неудачного обновления Ubuntu.
Удаление файлов libmysqlclient15 (которые были связаны с libmysqlclient15.so), решило мою проблему.
На моей машине мне пришлось удалить жемчужину, а затем перенаправить символическую ссылку /usr/local/mysql
в правильную версию Homebrew:
ln -s /usr/local/bin/mysql /usr/local/mysql
Затем запустите bundle install
.
Переустановите libmysqlclient-dev с apt remove libmysqlclient-dev && apt install libmysqlclient-dev
для меня