Бібліотека не завантажена: помилка 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.