Rails + MySQL на OSX: библиотека не загружена: libmysqlclient.18.dylib
Я только начинаю с Ruby (и рельсов). Я выполнил настройку в соответствии с http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, используя 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/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/username/.rvm/gems/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
Reason: image not found - /Users/username/.rvm/gems/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
Я видел другие публикации, рекомендующие переустанавливать MySQL через homebrew (мой был установлен через загружаемый DMG), но я бы предпочел не делать этого, поскольку у меня есть еще несколько баз данных, которые уже существуют для других нерубинных проектов.
У меня действительно есть файл, который ищет Rails; он установлен в /usr/local/mysql/lib/libmysqlclient.18.dylib
. Какой лучший способ сказать Rails, как его найти?
Ответы
Ответ 1
Решение довольно простое; Добавьте путь к библиотеке в файл ~/.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
Ответ 2
В Эль-Капитане я получил 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 снова работает нормально.
Ответ 3
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Это сработало для меня. Я установил MySQL из файла dmg.
Ответ 4
В то время как заголовок этого вопроса описывает именно ту проблему, с которой я столкнулся, обстоятельства отличаются от тех, которые описаны в предыдущих ответах, и поэтому было решением.
В моем случае (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
Обратите внимание, что подобные проблемы могут возникать при использовании различных библиотек, управляемых доморощенным (см. мой собственный ответ на этот вопрос, например)
Ответ 5
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Работал для меня. Все похожие не сделали.
Ответ 6
Если вы используете MySQL, установленный с HomeBrew в El Capitan, вам следует связать его следующим образом:
sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Ответ 7
Для 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
Ответ 8
Я столкнулся с этой проблемой после полного удаления и последующей установки MySQL. В частности:
Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
Я даже не коснулся моего приложения Rails.
Переустановка mysql2
gem решила эту проблему.
$ 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
Я подтверждаю, что исправление от Abhishek действительно работает.
он работает и для Йосемити.
Примечание:
вместо ссылки на конкретную версию mysql, используйте тот факт, что mysql уже создал символическую ссылку:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
это решение действительно работает для Xcode и C API.
Ответ 10
Чтобы убедиться, какая символическая ссылка необходима (зависит от версии 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
Ответ 11
Я использую Rails REE (2.3.4) для унаследованной системы. После обновления до El Capitan запуск script/console вызвал ошибку, и мое приложение больше не запускалось (используя 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 Capitan Защита). После отключения SIP и после перезагрузки команда ln работала нормально. Затем я отключил SIP. Теперь все в порядке. Мое приложение снова запускается с использованием pow и без ошибок с запуском script/console. Надеюсь, это поможет вам.
Ответ 12
Это работает для меня:
ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Ответ 13
gem uninstall -aIx
и
bundle install
работал у меня.
Ответ 14
используйте это из командной строки:
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 всегда работает
Ответ 15
Если вы используете Bitnami RubyStack и столкнулись с подобной проблемой. Попробуйте этот
sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Ответ 16
Моя проблема с загрузкой этого файла пакета была плохой символической ссылкой. Поэтому проверьте ссылку и при необходимости замените ее на новую. В этот момент все встало на свои места. Не знаю, как это произошло, но так оно и было. Первый раз, когда произошла синтаксическая ошибка.
Ответ 17
Я работал с командой 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
Оба они отлично работают для меня.
Надеюсь, это может быть полезно!
Ответ 18
У меня возникла проблема "Библиотека не загружена: libmysqlclient.18.dylib" при импорте MySQLdb из MySQL Для 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
Ответ 19
Единственное, что сработало для меня, это:
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 и gems, чтобы они соответствовали вашей системе.
Ответ 20
После множества поисковых запросов и попыток все выше... Единственное, что решило мою проблему, это команда:
$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Я использую macbook pro, OSX 10 El Capitan.
Дарвин xxxx-MacBook-Pro.local 15.6.0 Ядро Дарвина Версии 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
Ответ 21
На Mac Sierra, если вы используете Homebrew, выполните:
sudo ln -s /usr/local/Cellar/[email protected]/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Ответ 22
Для тех, кто использует brew. Просто свяжите версию mysql с опцией "--force".
brew link mysql56 --force