Драйвер MySQL Ruby не находит необходимые библиотеки

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

Приветствуется любое понимание.

Спасибо,

Итан

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
3 034
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Возможно, это как-то связано с префиксом, который вы использовали при установке 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 в конечном итоге привел меня к ответу, но я получил гораздо больше примеров того, как другие люди были ошеломлены простым процессом, который стал сложным без предупреждения.

Другие вопросы по теме