Linux 2.6.18-92.el5, ruby 1.8.7, Rails 2.2.2, mysql gem 2.7
Я установил двоичный дистрибутив MySQL в / usr / local, а затем установил гем mysql следующим образом:
gem install mysql --no-rdoc --no-ri \
-- --with-mysql-include=/usr/local/mysql/include \
--with-mysql-lib=/usr/local/mysql/lib \
--with-mysql-config=/usr/local/mysql/bin/mysql_config
Когда я запускаю irb> require 'mysql', я получаю сообщение об ошибке, показанное ниже:
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'mysql'
LoadError: libmysqlclient.so.16: cannot open shared object file:
No such file or directory -
/usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so
from /usr/local/lib/ruby/gems/1.8/gems/mysql-2.7/lib/mysql.so
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/
custom_require.rb:36:in `require' from (irb):2
После некоторого поиска в Google я обнаружил, что могу использовать ldconfig для настройки
mysql.so должен быть доступен для всей системы. Как только я добавил "/ usr / local /
mysql / lib "в /etc/ld.so.conf и запустил ldconfig, он работал нормально:
irb(main):002:0> require 'rubygems'
=> true
irb(main):003:0> require 'mysql'
=> true
Хорошо, так что я заставил его работать. Но у меня вопрос: почему я получил эту ошибку? Раньше у вас был только gem install mysql, и он работал. Кто-нибудь еще сталкивался с такой же ошибкой? Использование ldconfig кажется хрупким и неудобным. Есть ли лучшее решение?
Приветствуется любое понимание.
Спасибо,
Итан





Возможно, это как-то связано с префиксом, который вы использовали при установке mysql? --with-mysql-lib = / usr / local / mysql / lib
Предположительно, если это был / usr / local / lib (или где-то ldconfig уже был настроен для просмотра) и / или если вы только что использовали префикс верхнего уровня, например / usr / local, возможно, у вас не возникли проблемы ( ?)
У меня тоже были проблемы (в Mac OS X), и я был так же разочарован тем, что gem install mysql оказался не таким простым, как раньше.
Недальновидный ответ заключается в том, что гем mysql должен создавать собственные расширения, а для этого ему нужна некоторая информация о пути (специфическая для вашей системы) о библиотеках MySQL. Самый надежный способ получить эту информацию - предоставить ее вам.
Более широкий ответ заключается в том, что это ошибка дизайна в системе драгоценных камней. Когда почти каждый другой гем устанавливается с gem install foo, система и отправители гемов должны предоставить пользователям какие-то инструкции для важных исключительных случаев - даже если это просто обратная связь с сообщением об ошибке, которое говорит вам, что вы должны предоставить дополнительную информацию для установки этого драгоценный камень, и что это за информация.
Небольшой поиск в Google в конечном итоге привел меня к ответу, но я получил гораздо больше примеров того, как другие люди были ошеломлены простым процессом, который стал сложным без предупреждения.