Бібліотека не завантажена: помилка libmysqlclient.16.dylib при спробі запустити "сервер рейлів" на OS X 10.6 з mysql2 gem


206

Я боровся з цим вже деякий час.

Я встановив Rails 3, gem, mysql на своїй машині Snow Leopard. Все пройшло добре, поки я не створив свій перший проект і не спробував запустити

rails server

Після запуску цього я отримую:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Наскільки я можу сказати, проблема полягає в gem mysql2. Здається, MySQL працює нормально, і мій посилання на Gemfile mysql2, мій файл database.yml також здається нормальним.

Про помилку згадується

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

І все ж

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle є !?

Якщо я використовую старий дорогоцінний камінь mysql, WEBrick чудово взуття. Але це не ідеально, чи не так?

Я спробував все, що може дати мені Google! Будь-яка допомога дуже цінується.

Відповіді:


393

Мені ніколи не вдалося отримати жодну з цих відповідей, щоб вона працювала для мене, але це команда, яку я використовував, щоб змусити мене працювати. Таким чином, вам не потрібно використовувати install_name_tool щоразу, коли ви оновлюєте mysql

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

11
Це найпростіший і правильний спосіб вирішити цю проблему.
Волді

2
спасибі за це. зазначена вище відповідь працювала лише для одного сайту, але це працювало постійно. Його мо 'бетта.
фрегас

12
Для тих, кому цікаво, що відбувається, ця команда робить символічне посилання від другого місця до першого. Коли дорогоцінний камінь шукає бібліотеку клієнтів MySQL під /usr/lib, це посилання вирішиться до місця, де воно фактично встановлено. У ОС X зазвичай це під /usr/local/mysql/lib, на яке посилається ця команда. Якщо ваша lib встановлена ​​в іншому місці, вам потрібно буде змінити цю команду. Введіть locate libmysqlclient.18.dylibі замініть результат на перший аргумент після -s.
Siobhán

1
@Sean D., коли я запускаю locate libmysqlclient.18.dylib, я отримую цей вихід, WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.що не так?
GiH

1
@GiH Вам просто потрібно виконати команду, яку вона вам каже ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Це запустить процес індексації вашого жорсткого диска, що змусить locateкоманду працювати в майбутньому. Однак у більшості випадків я думаю, що вам цього не потрібно буде, і можна просто використовувати команду, яку luvlss надав як є.
Siobhán

93

Я вирішив це, врешті-решт!

Я знову встановив Ruby and Rails під RVM. Я використовую Ruby версії 1.9.2-p136.

Після повторної установки під rvm ця помилка все ще була присутня.

Врешті-решт магічна команда, яка її вирішила:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Сподіваюся, це допоможе комусь іншому!


1
Це якимось чином скинуло привілеї mysql, і тепер я не можу увійти в систему ... навіть після виконання скидання пароля за допомогою файлу, як описано в документах mysql.
Coderama

2
Дякую, це зробило це для мене. А для інших з тією ж проблемою, якщо ви використовуєте rvm, тоді пропустіть судо, інакше дозволи, ймовірно, зміняться.
DanneManne

2
Командна магія працює навіть у тому випадку, якщо ви не використовуєте RVM - просто змініть останній аргумент, щоб вказати на те, mysql2-0.2.6/lib/mysql2/mysql2.bundleде встановлені ваші дорогоцінні камені.
Тобіас Коен

2
Дуже дякую. Як же ти це зрозумів?
Дерек

7
Дякую! Мені потрібна була дещо інша команда для мого Mac OS X Lion під керуванням RVM 1.6.4 з Ruby 1.9.2-p180, mysql2 gem 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Ренді Еппінгер

88

Це виправлення працювало для мене дуже добре:

Додайте наступне до свого ~ / .profile

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-rails-3/


1
Велике спасибі. Це працювало для мене. (Mac os x 10.6.6i, ruby ​​1.9.3p327), використовуючи RVM.
дата

Підтверджено. Це було все, що мені довелося додати на OSX Maverick 10.9.1
Artur79

40

Для мене це було лише тому, що я оновив mysql, але не оновив mysql2 gem - перевстановлення дорогоцінного каменю це виправить ...

gem pristine mysql2


Це має бути обрана відповідь.
Ель-Гуапо

26

У мене те саме питання. Схоже, не вдається знайти бібліотеку libmysqlclient. Тимчасове виправлення, яке працювало для мене, таке:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Я не впевнений, де конфігурація вказує шлях завантаження або для чого він встановлений, але моє встановлення mysql не виявилося в ньому. Я відправлю ще раз, якщо знайду більш постійне рішення.

Редагувати: насправді це виправлення виявляється для більш точного вирішення проблеми.


24

Додайте нижче до свого ~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Це працювало для мене


Так, працює на 1.9.3-p448. Ганьба, що це не прийнята відповідь.
andreimarinescu

17

Після оновлення OSX El Capitan виконайте такі дії:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

це видає помилку, як

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Отже, щоб уникнути цього, найперше знайдіть libmysqlclient.18.dylibза допомогою команди

User$ locate libmysqlclient.18.dylib

У моєму випадку це повернулося /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Тож замість цього usr/lib/ми створимо символьне посилання, usr/local/lib/як це:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Детальніше: https://forums.developer.apple.com/thread/7935


1
На "Ель Капітан" для мене все, що потрібно, - це ти останній рядок:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Джастін

Радий, що це комусь допомогло. : D
Sony Mathew

Це ПРАВА відповідь на elcapitan, ваше цільове посилання має бути в /usr/local/libпапці
Арнольд Роа,

13

Наступні рядки для мене працюють. Я використовую Mac 10.7.2.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib


1
Це те, що вирішило мою проблему. Дякую!
Джастін Бозоньє

11

Щойно зіткнувся з цією проблемою. Все, що я повинен був зробити, - це видалити дорогоцінний камінь mysql2 та перевстановити його. Сподіваюся, це працює для інших людей


1
На своїй машині під керуванням Mavericks я видалив усю версію дорогоцінного кодексу mysql2 з видаленням дорогоцінного каменю mysql2 та відповіді All versionsна запит. Потім я запустив варити оновлення mysql, а потім встановити gem mysql2.
Мартін Стрейчер

4

Ось як це працювало для мене:

Я запустив команду нижче
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

Моє оточення:
$ rails -v Rails 3.0.6

$ mysql - версія
mysql Ver 14.14 Distrib 5.5.11, для osx10.6 (i386) за допомогою рядка 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011-02-18, версія 30909) [x86_64-darwin10.7.0]

Сподіваюся, що це комусь допоможе.


3

Спасибі, Огапо! Експорт цього псевдоніма працював на мене, і тоді я перейшов за посиланням, і в моєму випадку mysql2.bundle був в /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle так Я скоригував install_name_tool, щоб змінити пакет, а не один в ~ / .rvm, і отримав цю роботу так, як це слід зробити.

Так що тепер:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

3

привіт, це працювало для мене з рекомендованого посилання від Фредді Андерсена

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

просто довелося змінити мою версію mysql, в команді, дякую


3

Я вирішив цю проблему, видаливши свій дорогоцінний набір для мого поточного проекту та відтворивши його та повторно встановивши пакет. Я думаю, що я спричинив це, встановивши новішу версію mysql.


3

У мене виникла ця проблема під час роботи з Django, я використовую brewдля установки багатьох моїх програм з відкритим кодом, і мені потрібно було зробити наступне, оскільки я brewвстановлював mysql:

sudo ln -s /usr/local/Cellar/mysql/5.5.20/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Обов’язково замініть свою версію бібліотек!


3

bundle install mysql --forceмені допомогли. Він перевстановив залежності, вироби яких пішли в результаті brew uninstall mysql.


Unknown switches '--force'
Арнольд Роа

2

Джонті, я теж борюся з цим.

Я думаю, тут є підказка:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Зауважте, шлях до дилібу, е, досить короткий?

Я намагаюся розібратися, де інструкції щодо встановлення дорогоцінного каміння залишають шлях до шляху dilib, але це повільно, оскільки я ніколи не будував самоцвіт.

Я пошлю більше, якщо знайду більше!


2

У мене була така сама проблема кілька днів тому. Зрештою мені вдалося це вирішити. Я не зовсім впевнений, як, але я все одно розповім, що я зробив. Можливо, це допоможе тобі.

Я почав із завантаження RVM. Якщо ви його ще не використовуєте, настійно рекомендую це зробити. Це в основному створює пісочницю для нової окремої установки Ruby, RoR та RubyGems. Насправді ви можете мати кілька установок одночасно і миттєво переходити один на одного. Це працює як шарм.

Чому це корисно? Тому що вам не слід возитися з установкою Ruby за замовчуванням в OS X. Система залежить від цього. Найкраще просто залишити установку Ruby та RoR за замовчуванням у спокої та створити новий, використовуючи RVM, який ви можете використовувати для власної розробки.

Як тільки я створив свою окрему установку Ruby, я щойно встановив RoR, RubyGems і mysql, і це спрацювало. Точні кроки, які я здійснив, див. Моє запитання: Встановлення Rails, MySQL і т.д. все піде не так

Знову ж таки: я не знаю точно, це вирішить вашу проблему. Але це, безумовно, зробило трюк для мене, і в будь-якому випадку використання RVM вкрай не рекомендується.


2

Я все-таки виявив, що з рішеннями, описаними вище, він не працював (наприклад) із плагіном Rails для TextMate. У мене виникла аналогічна помилка (при пошуку схеми бази даних).

Отже, що було, відкрити термінал:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Замініть mysql-5.5.8-osx10.6-x86_64 власним шляхом (або mysql).

Це робить посилання символу на lib, тепер рейли виконуються з командного рядка, а також плагіни TextMate, як-от ruby-on-rails-tmbundle .

Щоб було зрозуміло: це також виправляє помилку, яку ви отримуєте при запуску сервера рейлів.


2

Зазвичай це відбувається під час оновлення mysql. Встановлений дорогоцінний камінь mysql2, який був побудований на старих файлах mysql, не може працювати з новими. Просто потрібно її перевстановити.

Видаліть mysql2 за допомогою gem uninstall mysql2. Потім встановіть йогоgem install mysql2


1

Я вирішив це, створивши .rvmrc файл у моїй папці проекту, що містить:

rvm use <yourrubie>

то вступаючи до мого шляху проекту

cd ~/myprojectpath

то я біжу

bundle install

1

Моя версія команди luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Пасажир 5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Якщо ви намагаєтесь багато різних посилань, як я, зробіть чистку за допомогою:

sudo unlink /usr/lib/libmysqlclient.18.dylib


1

Відкрийте термінал і запустіть наступне:

export PATH=$PATH:/usr/local/mysql/bin

Це має працювати.


1
Це зробило роботу, дякую !!! У мене виникли проблеми з тим, щоб Django запустився на Visual Studio Code. Продовжує отримувати помилку, чи встановив я mysqlclient на virtualenv.
Іршу

0

Якщо ви використовуєте OSX та встановили mysql за допомогою brew, ви можете:

brew link mysql

Якщо у вас виникли проблеми з версією (у мене був запущений mysql 5.7, поки мені потрібен дорогоцінний камінь 5.6.25),

brew unlink mysql
brew switch mysql 5.6.25

0

Для мене довелося видалити mysql вручну

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.