rails + MySQL w OSX: Biblioteka nie załadowana: libmysqlclient.18.dylib

119

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

Teraz chciałbym spróbować przekonwertować rzeczy do MySQL, ponieważ to jest to, z czym robię większość mojego rozwoju. 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ę utworzyć DB dla szyn w MySQL, otrzymuję:

$ 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 zalecają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 innych niż Ruby.

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

George Armhold
źródło
Czy to może być duplikat tego? stackoverflow.com/questions/4546698/…
gmile
W rzeczy samej. Nie mogę usunąć własnego pytania? Głosował na zamknięcie jako dup.
George Armhold

Odpowiedzi:

313

Rozwiązanie jest całkiem proste; Dodaj ścieżkę do biblioteki w swoim pliku ~ / .bash_profile lub ~ / .profile:

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

Jeśli nadal nie działa (to działa dla mnie):

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

Jest wiele blogów, z install_name_toolktórymi nie mogę skorzystać, ponieważ korzystam z 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
atejeda
źródło
16
Link symboliczny działał dla mnie (po uaktualnieniu do Mountain Lion). Dzięki!
siannopollo
5
Symlink to robi, szczególnie w przypadkach takich jak uruchamianie szyn spod RubyMine, gdzie .bash_profiletak naprawdę nie ma zastosowania.
maksimov
2
Dodałem Twoją DYLD_LIBRARY_PATH do .bash_profile, ale musiałem również odinstalować gem „mysql2”, a następnie ponownie go zainstalować. jak: 'gem uninstall mysql2 && gem install mysql2'
Brendan
73
Dla tych, którzy przyjeżdżają tutaj 10.11, nie można usr/libjuż utworzyć linku symbolicznego, ale usr/local/libbędzie działał link symboliczny do :sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons
2
@JonathanSimmons - Właśnie uratowałeś mnie przed wyrywaniem reszty włosów. Oryginalna odpowiedź na dowiązanie symboliczne nie działa w systemie OS X 10.11.5, po prostu pojawia się błąd „ln: /usr/lib/libmysqlclient.18.dylib: Operacja niedozwolona” - Wszystko działa teraz i mogę wreszcie uruchomić praca na cały dzień ... Dzięki!
Colin Adams,
125

W El Capitan dostałem ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

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

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

Serwer Rails znów działa poprawnie.

TinMonkey
źródło
2
Nie potrzebowałem całej odpowiedzi Alexa. Jedno symboliczne łącze załatwiło sprawę.
gitb
Zrobiłem to i otrzymałem: "connect": Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2) (Mysql2 :: Error) "
Josh Hunter
1
@JoshHunter Uważam, że to osobny problem. W tym miejscu jest wątek stackoverflow.com/questions/18449050/ ... może również oznaczać, że serwer MySQL nie działa.
TinMonkey
tak, serwer nie działał ... to naprawiło to. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter
62

O ile tytuł tego pytania dokładnie opisuje napotkany przeze mnie problem, okoliczności różnią się od tych opisanych w poprzednich odpowiedziach, tak samo jak rozwiązanie.

W moim przypadku (El Capitan, mysql zainstalowany przez homebrew) a brew update && brew upgradespowodował aktualizację pakietu mysql do wersji 5.7.10 (z 5.6.x).

Uaktualnienie libmysqlclient.18.dylibzostało zastąpione przez libmysqlclient.20.dylib, ale mysql2klejnot nadal polegał na tym pierwszym.

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

Zwróć uwagę, że podobne problemy mogą wystąpić w przypadku różnych bibliotek zarządzanych przez homebrew ( zobacz na przykład moją własną odpowiedź )

Giuseppe
źródło
Świetny ! Zaktualizowałem mysql do wersji 5.7 ... napotkałem ten problem ..... wykonałem następujące kroki 1. gem odinstaluj mysql2> wybrana opcja 3 2. gem install mysql2 3. dodałem to do gemfile projektu ---> gem 'mysql2' , '~> 0.3.21' 4. instalacja pakietowa
Udit Kapahi
10
Polecam każdemu najpierw spróbować tego! Jeśli to zadziała, możesz uniknąć zepsucia systemu za pomocą innych obejść. Czasami musisz polegać na magicznych dowiązaniach symbolicznych itp., Ale sprawia to, że Twój system jest coraz bardziej kruchy. (Jeśli to nie zadziała, nic się nie stanie i nic do cofnięcia.)
Tom Wilson,
Dla mnie też zadziałało. Problem polegał na tym, że przeniosłem się z instalacji mysql w / homebrew do oficjalnego instalatora.
xenetics
1
Dla wszystkich użytkowników Pythona, którzy się tu dostali, pip uninstall mysqlclienta pip install mysqlclienttakże działali.
Peter Dolan
26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

To zadziałało dla mnie. Zainstalowałem MySQL z pliku dmg.

Józefa
źródło
To działało na Mac OS X - Yosemite dla mnie z MySQL zainstalowanym z pliku dmg. Dzięki Joseph.
racl101
4
Operacja niedozwolona (oczywiście z sudo) moja wersja SO to El
capitan
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Pracował dla mnie. Wszystkie podobne nie.

Greg Benner
źródło
To jest rozwiązanie dla RubyMine.
Justin
13

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

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

Nawet nie dotknąłem aplikacji Rails.

Ponowna instalacja mysql2klejnotu rozwiązała 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 Yosemite 10.10]

Sealocal
źródło
9

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
arjunswaj
źródło
6

Dla MySql 5.6 zainstalowanego 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
Abhishek Pande
źródło
4

Potwierdzam, łata od Abhishek wykonuje pracę.

działa również dla Yosemite.

uwaga: zamiast linkować do konkretnej wersji mysql, użyj faktu, że mysql już zbudował link symboliczny:

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.

ingconti
źródło
3

Dla tych, którzy używają naparu. Po prostu połącz swoją wersję mysql z opcją "--force".

brew link mysql56 --force
tagaizm
źródło
To jest sposób na dowiązanie pliku biblioteki ... zamiast używać opcji ln -s. Użyj linku napar [email protected] --force dla zaktualizowanej wersji
Vahid Kowsari
Dzięki. Zrobiłem brew link [email protected] --force. Działał doskonale.
Aye Mon Chit
2

Aby upewnić się, jaki link symboliczny jest potrzebny (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

a więc :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Fraide
źródło
2

To działa dla mnie:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Syn
źródło
Skończyło się na tym, że był dla mnie odmianą ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor
1

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


Na podstawie powyższego wątku ustalił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 spowodowało błąd: „ln: /usr/lib/libmysqlclient.18.dylib: Operacja niedozwolona”. Nigdy wcześniej nie widziałem tego błędu.

Po długich poszukiwaniach znalazłem ten artykuł: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html i śledziłem instrukcje wyłączania SIP (nowa ochrona 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 działa ponownie przy użyciu pow i nie ma błędu podczas uruchamiania skryptu / konsoli. Mam nadzieję, że to Ci pomoże.

GeezerGeek
źródło
1

Na Mac Sierra, jeśli używasz Homebrew, wykonaj:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Abhishek
źródło
1
gem uninstall -aIx

i

bundle install

pracował dla mnie.

atomiccoder
źródło
1

To zadziałało dla mnie. Wszystko, co musiałem zrobić, to odinstalować mysql2 gem i zainstalować go ponownie za pomocą poniższych poleceń

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
Magowie
źródło
1

Używam systemu Mac OS i utknąłem z tym błędem nawet po odinstalowaniu / usunięciu wszystkich mysql i MAMP. Wcześniej zainstalowałem brew install mysqli też korzystałem MAMP. addling softlink nie działał dla mnie.

Zostało to rozwiązane tylko przez usunięcie wszystkich istniejących mysql. a następnie zainstaluj mysql przez MySQL stąd .

Manish Shrivastava
źródło
0

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

toksyczny
źródło
0

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
noelvictorino
źródło
0

Mój problem z ładowaniem tego pliku pakietu 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. Pierwszy raz zdarzył się taki błąd składni.

Rich_F
źródło
0

Pracowałem z poleceniem rails g model i otrzymałem ten błąd:

Library not loaded: libmysqlclient.18.dylib

Próbowałem tego i to zadziałało. 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 mam ten sam błąd, więc właśnie 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 może się przydać!

alexventuraio
źródło
0

Wystąpił problem „Biblioteka nie została załadowana: 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 u 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
Binh Dang
źródło
@MSU_Bulldog Oczywiście to odpowiada na pytanie. Dostarcza nawet nowych informacji. To, że odpowiedź zawiera błąd, który je tu sprowadził, nie oznacza, że ​​rozwiązanie, które również dostarczają, jest bez wartości.
Artjom B.
0

Jedyne, co mi pomogł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 gemów tak, aby pasowały do ​​Twojego systemu.

Aleksandar Pavić
źródło
0

Po wielu googlach i próbach wszystkiego powyżej ... jedyną rzeczą, która rozwiązała mój problem, było to polecenie:

$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 Wersja jądra Darwina 15.6.0: czw. 23 czerwca 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 MySQL: 5.6.19

Czerwona Chmura
źródło
0

Dzięki. Aktualizacja Homebrew sprawiła, że ​​moje aplikacje Rails miały problemy na moim Macu. Ponownie zainstalowałem MySQL (5.7) ze źródła, potem musiałem to zrobić

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

na podstawie tego, co przeczytałem powyżej oraz w moim pliku Gemfile

gem 'mysql2', '0.5.3'

oraz w database.yml

adapter: mysql2
rodmclaughlin
źródło
0

Odpowiedzi na to pytanie jest już wiele, zwłaszcza ta https://stackoverflow.com/a/10847618/5515861 . Chcę tylko dodać kilka uwag. Jeśli używasz Maca, nie wiem, jak instalujesz MySQL, ale pierwszą rzeczą do zbadania jest to, gdzie znajduje się twoja instalacja MySQL. U mnie MySQL jest instalowany przy użyciu brewwersji 5.7, a lokalizacja to /usr/local/opt/[email protected]/, więc dodaj następujący plik do my ~/.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

Mam nadzieję, że rozwiążesz swoje problemy 😁

abmap
źródło