rails + MySQL на OSX: Бібліотека не завантажена: libmysqlclient.18.dylib


119

Я тільки починаю з Рубі (і рейки). Я зробив налаштування відповідно до http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby дорогоцінних каменів, використовуючи rvm. У мене все добре працює з sqlite.

Тепер я хотів би спробувати перетворити речі на MySQL, оскільки саме цим я займаюся більшу частину своєї розробки. У своєму Gemfile я замінив sqlite на mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

Але коли я намагаюся створити БД для рейок в MySQL, я отримую:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

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

Насправді у мене є файл, який шукає Рейлс; він встановлений в /usr/local/mysql/lib/libmysqlclient.18.dylib. Який найкращий спосіб сказати Рейлам, як його знайти?


Чи може це бути дублікатом цього? stackoverflow.com/questions/4546698 / ...
gmile

Справді. Не можу видалити власне запитання? Голосували за закриття як дуб.
Джордж Армхолд

Відповіді:


313

Рішення досить легко; Додайте шлях до бібліотеки у файл ~ / .bash_profile або ~ / .profile:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Якщо вона все ще не працює (ця робота для мене):

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

Є багато блогів install_name_tool, які не працюватимуть для мене, оскільки я перебуваю на OSX Lion:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search

16
Символьна посилання працювала на мене (після оновлення до Гірського Лева). Дякую!
siannopollo

5
Symlink робить це, особливо для таких випадків, як запуски рейки з-під RubyMine, де .bash_profileнасправді не застосовується.
максимов

2
Я додав ваш DYLD_LIBRARY_PATH до .bash_profile, але мені також довелося видалити дорогоцінний камінь mysql2, після чого знову встановити його. як: 'gem uninstall mysql2 && gem install mysql2'
бренд

73
Для тих, хто приїде сюди о 10.11, ви вже не можете перейти usr/libна посилання, але usr/local/libбуде працювати посилання:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons,

2
@JonathanSimmons - Ти щойно врятував мене від витягування решти волосся. Оригінальна відповідь symlink не працює в OS X 10.11.5, ви просто закінчите помилку "ln: /usr/lib/libmysqlclient.18.dylib: Операція не дозволена" - Все працює зараз, і я можу нарешті запустити свою робота за день ... Дякую!
Колін Адамс

125

В Ель-Капітан я потрапив ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

В El Capitan /usr/lib/зараз є прапор з обмеженим доступом, і його не можна записувати без відключення безпеки, тому я просто поставив посилання /usr/local/libзамість цього.

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

Сервер Rails знову працює нормально.


2
Не потрібна була вся відповідь Алекса. Одне символічне посилання зробило трюк.
gitb

Я зробив це і отримав: "connect": Не вдається підключитися до локального сервера MySQL через сокет "/tmp/mysql.sock" (2) (Mysql2 :: Помилка) "
Josh Hunter

1
@JoshHunter Я вважаю, що це окреме питання. Тут є нитка stackoverflow.com/questions/18449050/…, може бути просто те, що сервер MySQL не працює.
TinMonkey

так, сервер не працював ... це виправлено. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter

62

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

У моєму випадку (El Capitan, mysql, встановлений через homebrew), через brew update && brew upgradeпакет mysql було оновлено до 5.7.10 (з 5.6.x).

Оновлення призвело libmysqlclient.18.dylibдо заміни libmysqlclient.20.dylib, але mysql2дорогоцінний камінь все ще покладався на колишній.

Щоб вирішити проблему, я зробив: gem uninstall mysql2 && gem install mysql2

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


Чудово! Я оновив MySQL до 5.7 ... зіткнувся з цією проблемою ..... зробив Наступні кроки 1. gem uninstall mysql2> вибраний варіант 3 2. gem встановити mysql2 3. додав це до gemfile проекту ---> gem 'mysql2' , '~> 0.3.21' 4. Встановити пакет
Udit Kapahi

10
Рекомендую всім спробувати це спочатку! Якщо це працює, ви можете уникнути зв’язку вашої системи з будь-яким іншим способом обходу. Іноді доводиться покладатися на магічні посилання тощо, але це робить вашу систему все більш і більш крихкою. (Якщо це не спрацює, не заподіюється ніякої шкоди і нічого не скасовується.)
Том Вілсон,

Працював і для мене. Проблема полягала в тому, що я перейшов із встановлення mysql w / homebrew до офіційного інсталятора.
ксенетика

1
Для всіх користувачів пітона отримувати тут, pip uninstall mysqlclientа pip install mysqlclientтакож працював.
Пітер Долан

26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Це працювало для мене. Я встановив MySQL з файлу dmg.


Це працювало на Mac OS X - Yosemite для мене з MySQL, встановленим з файлу dmg. Дякую Джозефу.
racl101

4
Експлуатація заборонена (очевидно, з судо) моя версія SO - El capitan
ignacio chiazzo

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

Працювали для мене. Усі подібні не зробили.


Це рішення для RubyMine.
Джастін

13

Я зіткнувся з цією проблемою після повного видалення, а потім свіжої установки MySQL. Конкретно:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

Я навіть не торкнувся свого додатка Rails.

Перевстановлення mysql2дорогоцінного каміння вирішило цю проблему.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]


9

Якщо ви використовуєте MySQL, встановлений з HomeBrew в Ель-Капітан, то вам слід пов’язати його наступним чином:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

6

Для MySql 5.6, встановленого з DMG на Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

4

Я підтверджую, що патч від Abhishek дійсно працює.

це також працює для Yosemite.

зауважте: замість посилання на певну версію mysql використовуйте факт mysql, який вже побудував symlink:

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

це рішення працює для Xcode та C API.


3

Для тих, хто вживає заварку. Просто зв’яжіть версію mysql з опцією "--force".

brew link mysql56 --force

Це спосіб зв’язати файл бібліотеки ... а не використовувати опцію ln -s. Використовуйте посилання для пивоварення mysql@5.7 --force для оновленої версії
Vahid Kowsari

Дякую. Я так і зробив brew link mysql@5.7 --force. Працювали чудово.
Aye Mon Chit

2

Щоб переконатися в тому, що потрібне символьне посилання (залежить від версії mysql та версії os):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

і так:

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

2

Це працює для мене:

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

Закінчився для мене варіантом ... ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor

1

Я використовую Rails REE (2.3.4) для існуючої в нас застарілої системи. Після оновлення до El Capitan, запуск сценарію / консолі видав помилку, і моє додаток більше не запускатиметься (використовуючи pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


З цього самого потоку вище я визначив, що мені потрібно видати цю команду в терміналі:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Ця команда видала помилку: "ln: /usr/lib/libmysqlclient.18.dylib: Операція заборонена". Я ніколи раніше не бачив цієї помилки.

Після трохи копання я знайшов цю статтю: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html і дотримувався вказівки для вимкнення SIP (нового захисту системи захисту від цілісності El Elitan). Після вимкнення SIP та після перезавантаження команда ln спрацювала нормально. Потім я відключив SIP. Зараз все добре. Мій додаток запускається знову, використовуючи pow та без помилок під час запуску сценарію / консолі. Я сподіваюся, що це вам допоможе.


1

На Mac Sierra, якщо ви використовуєте Homebrew, тоді виконайте:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


1

Це працювало для мене. Все, що мені потрібно було зробити, - це видалити mysql2 gem та встановити його знову за допомогою наведених нижче команд

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config

1

Я використовую Mac OS, і я застряг у цій помилці навіть після видалення / видалення всіх mysql та MAMP. Раніше я встановлював brew install mysqlі також використовував MAMP. addling softlink не працював для мене.

Це було вирішено лише видаленням усіх існуючих mysql. а потім встановіть mysql через MySQL звідси .


0

використовувати це з вашого командного рядка:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

спробував на небагатьох комп'ютерах з maverick завжди працює


0

Якщо ви використовуєте Bitnami RubyStack і зіткнулися з подібною проблемою. Спробуйте це

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

0

Моя проблема із завантаженням цього файлу пакету була поганою посиланням. Тому перевірте посилання та замініть його на свіже, якщо потрібно. У цей момент все стало на свої місця. Не впевнений, як це сталося, але це сталося. Перший раз, коли помилка синтаксису трапилася так.


0

Я працював з командою rails g model, і я отримав цю помилку:

Library not loaded: libmysqlclient.18.dylib

Я спробував це, і він функціонував для мене. Я використовував Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Дякую!

Тепер я використовую Yosemite 10.10.5, і я отримав таку ж помилку, тому я просто запустив цю команду на терміналі, і вона була успішно виправлена.

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

також ви можете спробувати:

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

Вони обидва для мене добре працюють. Сподіваюся, це може бути корисним!


0

Я отримав цю проблему "Бібліотека не завантажена: libmysqlclient.18.dylib" під час імпорту MySQLdb з MySQL For python3 :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

Для мене працює рішення: Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

@MSU_Bulldog Звичайно, він відповідає на питання. Він навіть надає нову інформацію. Тільки тому, що відповідь включає помилку, яка їх привела сюди, не означає, що рішення, яке вони також надають, не має значення.
Artjom B.

0

Єдине, що для мене працювало:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

Замініть доріжки mysql та дорогоцінних каменів, щоб відповідати вашій системі.


0

Після багатьох гуглів та спроб у всьому вище ... єдине, що вирішило мою проблему, була ця команда:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Я використовую macbook pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Версія 15.6.0: Чт 23 червня 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19


0

Дякую. Оновлення Homebrew зробило проблеми з моїми програмами Rails на моєму Mac. Я перевстановив MySQL (5.7) з джерела, тоді мені довелося це зробити

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

на основі того, що я читав вище, і в моєму Gemfile

gem 'mysql2', '0.5.3'

і в database.yml

adapter: mysql2

0

На це питання вже багато відповідей, особливо це https://stackoverflow.com/a/10847618/5515861 . Я хочу лише додати пару нот. Якщо ви, хлопці, що використовують Mac, я не знаю, як ви встановите MySQL, але перше, що потрібно вивчити, - де знаходиться ваша установка MySQL. Для мене MySQL встановлений за допомогою brewверсії 5.7, а розташування є /usr/local/opt/mysql@5.7/, тому додайте наступне до мого ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

Сподіваюся, ви вирішите свої проблеми 😁

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