Ruby mysql2 gem скомпилирован для неправильной версии клиентской библиотеки mysql
после обновления 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 открывается, но падает после запуска любого тип запроса.
вот полный стек ошибок при попытке самой последней версии mysql2 gem:
[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>'
редактировать: я удалил все mysql2 gemspecs из кэша, удалил все связанные с mysql пакеты через apt-get и переустановил все заново, затем снова попытался установить gem с флагом mysql-config .. но все оказалось тщетным. Ошибка остается.
Изменить 2: как предложил Джон Башир, Я подтвердил, что mysql_config содержит MySQL версии 5.5.
13 ответов
я столкнулся с той же ошибкой при использовании Ubuntu Server 11.04 и сервера Percona, что я сделал:
заменить /usr/lib/libmysqlclient.so.16.0.0
с /usr/lib/libmysqlclient.so.18.0.0
поздно на вечеринку, но я только что сделал
gem uninstall mysql2
gem install mysql2
драгоценный камень путь был
$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
У меня была эта проблема, и мне просто нужно было перекомпилировать драгоценный камень. Я не знаю, есть ли более программный способ с bundler, но я просто удалил скомпилированный gem, а затем повторно запустил 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
и драгоценный камень mysql2, установленный bundle install
является mysql2-0.3.13
Я решил эту проблему, просто установив драгоценный камень 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.найдите mysql_config, от которого зависит ваша библиотека gem.
mysql_config ситуация отличается в машине разных людей, и одна машина людей может иметь несколько mysql_config, поэтому нет стандартного пути mysql_config для всех. Как этот вопрос, например, версия mysql_config - "5.1.58", поэтому вы можете искать файл " mysql "в root, чтобы найти, что связано с"5.1.58":
cd /
sudo find -name "mysql" ./
2.установите mysql2 gem library снова с конкретным mysql_config путь найти в шаге 1
gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
кроме того, чтобы убедиться, что только libmysqlclient18
библиотека была установлена (а не 16), что заставило ее работать для меня, это установка libmysqlclient18-dev
(заголовки dev).
это с Фирконом 5.5 сервер на Ubuntu точным.
Я попробовал все ответы выше, и мой окончательный подход был довольно прост - удалите весь пакет Gem stack и переустановите все. Это, наконец, обошло проблему клиента mysql. т. е.
rm-rf / пользователи / sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
bundle install
Если вы знаете программу c, вы можете удалить это сообщение. опусти это.
откройте этот mysql.
-
найти "этот драгоценный камень был скомпилирован для", удалите это предложение if .
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 . Набор ДИСК_ДОМАШНЕЙ_ПАПКИ=с: Ошибка: при выполнении камень ... (Errno::EINVAL) недопустимый аргумент @ rb_file_s_stat - U:/
установите локальный файл gem . C:\Rails > gem install --локальный mysql-2.9.1.Гэм-установить-реж=ц: в/tmp --платформа= Рубин -- --с-для MySQL маршрутизатор dir=с:/рельсы/в MySQL-разъем-с mysql-connector-c посещение mysql http://dev.mysql.com/downloads/connector/c/ . тебе плевать версия.
снова попробовать. требуется "mysql"
в моем случае у меня были различные файлы из libmysqlclient15 (датированные 2009) и libmysqlclient16 (датированные 20012), оставленные в /usr/lib, возможно, от неудачного обновления Ubuntu.
удаление файлов libmysqlclient15 (которые были связаны с libmysqlclient15.Итак) решил мою проблему.
на моей машине мне пришлось удалить камень, а затем вновь прямой ссылке /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
исправлена для меня