Драйвер MySQL от Ruby не находит необходимые библиотеки - PullRequest
2 голосов
/ 05 декабря 2008

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 кажется хрупким и недостижимым. Есть ли лучшее решение?

Любое понимание будет с благодарностью.

Спасибо

Этан

Ответы [ 2 ]

2 голосов
/ 09 декабря 2008

У меня тоже были проблемы (в Mac OS X), и я был так же разочарован, что gem install mysql не был таким простым, как раньше.

Недальновидный ответ заключается в том, что гем mysql должен создавать собственные расширения, а для этого ему нужна некоторая информация о пути (специфичная для вашей системы) в библиотеках MySQL. Самый надежный способ получить эту информацию - предоставить ее вам.

Более крупный ответ - это ошибка проектирования в системе драгоценных камней. Когда почти каждый другой драгоценный камень устанавливается с gem install foo, система и отправители драгоценного камня должны предоставить пользователям какую-то инструкцию для важных исключительных случаев - даже если это просто обратная связь с сообщением об ошибке, которое говорит вам, что вы должны предоставить больше информации для установить этот драгоценный камень, и что это за информация.

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

1 голос
/ 05 декабря 2008

Возможно, это как-то связано с префиксом, который вы использовали при установке mysql? --with-MySQL Пб = / USR / местные / MySQL / Библиотека

Предположительно, если это был / usr / local / lib (или где-то ldconfig уже был настроен на поиск) и / или если вы только что использовали префикс верхнего уровня, например, / usr / local, вы, возможно, не запустили в проблемы (?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...