rails + MySQL na OSX: biblioteka Nie załadowana: libmysqlclient.18.dylib

Dopiero zaczynam z Ruby (i rails). Zrobiłem konfigurację zgodnie z http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby , używając rvm. Mam wszystko działa dobrze z sqlite.

Teraz chciałbym spróbować konwertować rzeczy do MySQL, ponieważ to jest to, co robię większość mojego rozwoju z. W moim Gemfile zamieniłem sqlite na mysql2:

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

Ale kiedy próbuję stworzyć DB dla rails w MySQL dostaję:

$ 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

Widziałem inne posty sugerujące ponowną instalację MySQL przez homebrew( mój został zainstalowany przez DMG do pobrania), ale wolałbym tego nie robić, ponieważ mam tam już kilka innych baz danych dla innych projektów nie-ruby.

W rzeczywistości mam plik, którego Rails Szuka; jest zainstalowany w /usr/local/mysql/lib/libmysqlclient.18.dylib. Jaki jest najlepszy sposób, aby powiedzieć Rails, jak go zlokalizować?

Author: The Unfun Cat, 2012-05-11

22 answers

Rozwiązanie jest dość proste; dodaj ścieżkę biblioteki w swoim~/.bash_profile lub ~/.plik profilu:

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

If it is still not working (this work for me):

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

Jest wiele blogów z install_name_tool, które mi nie pasują, bo jestem na 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
 296
Author: atejeda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 16:44:55

In El Capitan I got ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

W El Capitan /usr/lib/ ma teraz zastrzeżoną flagę i nie można do niej pisać bez wyłączania zabezpieczeń, więc zamiast tego wstawiam link w /usr/local/lib.

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

Rails server znowu działa poprawnie.

 120
Author: TinMonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-30 21:20:20

Podczas gdy tytuł tego pytania dokładnie opisuje problem, na który się natknąłem, okoliczności różnią się od tych opisanych w poprzednich odpowiedziach i tak było rozwiązanie.

W moim przypadku (El Capitan, mysql zainstalowany przez homebrew), a brew update && brew upgrade spowodowało uaktualnienie pakietu mysql do wersji 5.7.10 (z wersji 5.6.x).

Ulepszenie spowodowało zastąpienie libmysqlclient.18.dylib przez libmysqlclient.20.dylib, ale mysql2 gem nadal polegał na pierwszym.

Aby rozwiązać problem, który zrobiłem: gem uninstall mysql2 && gem install mysql2

Proszę zauważyć, że podobne problemy mogą wystąpić z różnymi bibliotekami zarządzanymi przez homebrew (zobacz moją własną odpowiedź na to, na przykład )

 40
Author: Giuseppe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:30
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
To mi pomogło. Zainstalowałem MySQL z pliku dmg.
 25
Author: Joseph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 16:45:34
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Zadziałało dla mnie. Wszystkie podobne nie.
 16
Author: Greg Benner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 16:45:12

Jeśli używasz MySQL zainstalowanego z HomeBrew w El Capitan, powinieneś połączyć go w następujący sposób:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
 8
Author: arjunswaj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-10 09:50:53

Napotkałem ten problem po całkowitym usunięciu, a następnie ponownej instalacji MySQL. Konkretnie:

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

Nawet nie dotknąłem aplikacji Rails.

Ponowne zainstalowanie gem rozwiązało ten problem.
$ 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 10.10]

 8
Author: sealocal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 20:52:24

Dla MySql 5.6 instalowanego z DMG na Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
 6
Author: Abhishek Pande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 20:13:58

Potwierdzam, że patch z Abhishek działa .

Działa również w Yosemite.

Uwaga: zamiast linkowania do konkretnej wersji mysql, użyj faktu, że mysql już zbudował dowiązanie symboliczne:

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

To rozwiązanie działa dla Xcode i C API.

 4
Author: ingconti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-15 20:02:51

Aby upewnić się, jakie dowiązanie symboliczne jest potrzebne (zależy od wersji mysql i wersji systemu operacyjnego):

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

I tak:

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
 2
Author: Fraide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-31 13:44:51

To działa dla mnie:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
 2
Author: Son,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-12 20:53:55

Używam Rails REE (2.3.4) dla starszego systemu, który mamy. Po aktualizacji do El Capitan, uruchomienie skryptu / konsoli spowodowało błąd i moja aplikacja nie mogła się już uruchomić (używając 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)


z tego wątku, powyżej, stwierdziłem, że muszę wydać to polecenie w terminalu:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
to polecenie wywołało błąd: "ln: / usr/lib / libmysqlclient.18.dylib: operacja niedozwolona". Nigdy wcześniej nie widziałem tego błędu.

Po trochę kopania, znalazłem ten artykuł: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html i postępuj zgodnie z instrukcjami, aby wyłączyć SIP (nową ochronę integralności systemu El Capitan). Po wyłączeniu SIP i ponownym uruchomieniu polecenie ln działało dobrze. Potem wyłączyłem SIP. Teraz wszystko jest w porządku. Moja aplikacja uruchamia się ponownie za pomocą pow i nie ma błędu uruchamiania skryptu / konsoli. Mam nadzieję, że to ci pomoże.

 1
Author: GeezerGeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-09 15:03:50

Na Mac Sierra Jeśli używasz Homebrew to wykonaj:

sudo ln -s /usr/local/Cellar/[email protected]/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
 1
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-27 11:17:58
gem uninstall -aIx

I

bundle install
Zadziałało dla mnie.
 1
Author: atomiccoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-29 21:29:31

Dla tych, którzy używają naparu. Wystarczy połączyć wersję mysql z opcją "-- force".

brew link mysql56 --force
 1
Author: tagaism,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-14 15:27:30

Użyj tego z linii poleceń:

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

Wypróbowany na kilku komputerach z maverick zawsze działa

 0
Author: toxic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-18 09:36:07

Jeśli używasz Bitnami RubyStack i napotkałeś podobny problem. Spróbuj tego

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
 0
Author: noelvictorino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 09:51:51

Mój problem z wczytywaniem tego pliku bundle był złym dowiązaniem symbolicznym. Sprawdź więc link i w razie potrzeby wymień go na nowy. W tym momencie wszystko się ułożyło. Nie wiem, jak to się stało, ale tak się stało. Po raz pierwszy wystąpił błąd składni.

 0
Author: Rich_F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 16:10:06

Pracowałem z rails g model i dostałem taki błąd:

Library not loaded: libmysqlclient.18.dylib

Próbowałem tego i to działało dla mnie. Używałem 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
Dzięki!

Teraz używam Yosemite 10.10.5 i dostałem ten sam błąd, więc po prostu uruchomiłem to polecenie na terminalu i zostało pomyślnie naprawione.

$ sudo ln -s /usr/local/mysql-5.6.26-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Możesz też spróbować:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Oba działają dobrze dla mnie. Mam nadzieję, że to może być przydatne!
 0
Author: Alex Ventura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-30 20:24:31

I got this issue " library not loaded: libmysqlclient.18.dylib " podczas importowania MySQLdb z MySQL dla 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

Rozwiązanie działa dla mnie: 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
 0
Author: Binh Dang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-01 16:56:17

Jedyne co mi się udało to:

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

Zamień ścieżki mysql i gems, aby pasowały do Twojego systemu.

 0
Author: Aleksandar Pavić,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-27 17:10:13

Po wielu googlowaniu i próbowaniu wszystkich powyższych...jedyne co rozwiązało mój problem to ta komenda:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Używam MacBooka pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Version 15.6.0: Thu Jun 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
Author: Redcloud,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-28 15:12:50