Biblioteka nie załadowana: błąd libmysqlclient.16.dylib podczas próby uruchomienia „serwera railsowego” w systemie OS X 10.6 z klejnotem mysql2

206

Zmagam się z tym od jakiegoś czasu.

Zainstalowałem Rails 3, gem, mysql na mojej maszynie Snow Leopard. Wszystko szło dobrze, dopóki nie stworzyłem pierwszego projektu i nie próbowałem uruchomić

rails server

Po uruchomieniu otrzymuję:

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$ 

O ile mogę stwierdzić, problem dotyczy klejnotu mysql2. Wygląda na to, że MySQL działa dobrze, a mój plik Gemfile odwołuje się do mysql2, a plik database.yml wydaje się również w porządku.

Błąd wspomina

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

I jeszcze

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 jest tam !?

Jeśli użyję starego klejnotu MySQL, WEBrick dobrze się uruchamia. Ale to nie jest idealne, prawda?

Próbowałem wszystkiego, co może mi dać Google! Każda pomoc bardzo doceniana.

Jonty Brook
źródło

Odpowiedzi:

393

Nigdy nie udało mi się uzyskać żadnej z tych odpowiedzi, która działała dla mnie, ale to jest polecenie, które sprawiło, że zadziałało dla mnie. W ten sposób nie musisz używać narzędzia install_name_tool przy każdej aktualizacji mysql

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
bezbarwny
źródło
11
To najprostszy i właściwy sposób rozwiązania tego problemu.
Voldy,
2
dzięki za to. powyższa zaznaczona odpowiedź działała tylko dla jednej witryny, ale działała na stałe. To mo betta.
fregas
12
Dla tych, którzy są ciekawi, co się dzieje, to polecenie tworzy symboliczne łącze z drugiej lokalizacji do pierwszej. Kiedy klejnot szuka biblioteki klienta MySQL pod /usr/liblinkiem, ten link zostanie rozwiązany w miejscu, w którym jest faktycznie zainstalowany. W systemie OS X jest to zwykle poniżej /usr/local/mysql/lib, do którego prowadzi to polecenie. Jeśli twoja biblioteka lib jest zainstalowana w innym miejscu, musisz dostosować to polecenie. Wpisz locate libmysqlclient.18.dylibi zastąp wynik pierwszym argumentem po -s.
Siobhán
1
@Sean D., kiedy uruchamiam zlokalizuj libmysqlclient.18.dylib Dostaję to wyjście, 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.co jest nie tak?
GiH
1
@GiH Wystarczy uruchomić polecenie, które ci mówi ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Rozpocznie to proces indeksowania dysku twardego, co sprawi, że locatepolecenie będzie działać w przyszłości. Jednak w większości przypadków myślę , że nie musisz tego robić i możesz po prostu użyć polecenia, które luvlss dostarczyło w obecnym stanie.
Siobhán
93

W końcu to rozwiązałem!

Ponownie zainstalowałem Ruby and Rails pod RVM. Używam wersji Ruby 1.9.2-p136.

Po ponownej instalacji w rvm ten błąd nadal występował.

Ostatecznie magiczne polecenie, które to rozwiązało, brzmiało:

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

Mam nadzieję, że to pomoże komuś innemu!

Jonty Brook
źródło
1
To w jakiś sposób zresetowało uprawnienia mysql, a teraz nie mogę się zalogować ... nawet po zresetowaniu hasła przy użyciu pliku opisanego w dokumentacji mysql.
Coderama,
2
Dzięki, zrobiło to dla mnie. A dla innych z tym samym problemem, jeśli użyjesz rvm, pomiń sudo, w przeciwnym razie uprawnienia prawdopodobnie się zmienią.
DanneManne,
2
Magiczne polecenie działa, nawet jeśli nie używasz RVM - wystarczy zmienić ostatni argument, aby wskazywał mysql2-0.2.6/lib/mysql2/mysql2.bundlegdziekolwiek są zainstalowane twoje klejnoty.
Tobias Cohen
2
Dziękuję bardzo. Jak do cholery to rozgryzłeś?
Derek
7
Dziękuję Ci! Potrzebowałem nieco innej komendy dla mojego Mac OS X Lion z RVM 1.6.4 z 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
Randy Eppinger
40

Dla mnie było tak tylko dlatego, że zaktualizowałem mysql, ale nie zaktualizowałem klejnotu mysql2 - ponowna instalacja klejnotu go naprawi ...

gem pristine mysql2

Łukasz
źródło
To powinna być wybrana odpowiedź.
El Guapo
26

Mam ten sam problem. Wygląda na to, że nie można znaleźć biblioteki libmysqlclient. Tymczasowa poprawka, która zadziałała, jest następująca:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Nie jestem pewien, gdzie konfiguracja określa ścieżkę ładowania lub co jest ustawione, ale moja instalacja mysql nie była w niej wyświetlana. Napiszę ponownie, jeśli znajdę bardziej trwałe rozwiązanie.

Edycja: W rzeczywistości ta poprawka wydaje się dokładniej rozwiązać problem.

Ogapo
źródło
24

Dodaj poniżej swoje ~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

To zadziałało dla mnie

DV Dasari
źródło
Tak, działa na 1.9.3-p448. Szkoda, że ​​to nie jest akceptowana odpowiedź.
andreimarinescu
17

Po wykonaniu tej czynności w aktualizacji OSX El Capitan:

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

generuje błąd jak

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Aby tego uniknąć, najpierw należy zlokalizować libmysqlclient.18.dylibza pomocą polecenia

User$ locate libmysqlclient.18.dylib

W moim przypadku wrócił /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Zamiast tego usr/lib/stworzymy dowiązanie symboliczne, aby usr/local/lib/polubić to:

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

Więcej informacji: https://forums.developer.apple.com/thread/7935

Sony Mathew
źródło
1
Na El Capitan dla mnie wszystko, czego potrzebowałeś, to ostatni wiersz:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Cieszę się, że komuś pomogło. : D
Sony Mathew
To jest PRAWA odpowiedź dla elcapitan, twój link docelowy powinien znajdować się w /usr/local/libfolderze
Arnold Roa
13

następujące wiersze działają dla mnie. Używam Mac 10.7.2.

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

S. Rasel
źródło
1
To właśnie naprawiło mój problem. Dzięki!
Justin Bozonier
11

Właśnie wpadłem na ten problem. Wszystko, co musiałem zrobić, to odinstalować klejnot mysql2 i zainstalować go ponownie. Mam nadzieję, że to działa na innych ludzi

Anh Pham
źródło
1
Na moim komputerze z systemem Mavericks usunąłem wszystkie wersje klejnotu mysql2 z odinstalowaniem klejnotu mysql2 i odpowiadając All versionsna monit. Następnie uruchomiłem brew upgrade mysql, a następnie zainstalowałem gem mysql2.
Martin Streicher
4

Tak to dla mnie działało:

Uruchomiłem poniższe polecenie
sudo nazwa_instalacji_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

Moje środowiska:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, dla osx10.6 (i386) przy użyciu readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (wersja 02.02.2011 30909) [x86_64-darwin10.7.0]

Mam nadzieję, że to komuś pomoże.

DV Dasari
źródło
3

Dzięki, Ogapo! Eksportowanie tego aliasu działało dla mnie, a następnie podążyłem za linkiem, aw moim przypadku mysql2.bundle był w /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, więc Zmodyfikowałem narzędzie install_name_tool, aby zmodyfikować ten pakiet zamiast jednego w ~ / .rvm i działałem tak, jak powinien.

Więc teraz:

   $ 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)
tobinjim
źródło
3

cześć, to zadziałało dla mnie z zalecanego linku Fredy'ego Andersena

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

właśnie musiałem zmienić na moją wersję mysql, w poleceniu, dzięki

manuelBetancurt
źródło
3

Rozwiązałem ten problem, usuwając mój zestaw gemów dla mojego bieżącego projektu, odtwarzając go ponownie i uruchamiając ponownie instalację pakietu. Myślę, że spowodowałem to instalując nowszą wersję mysql.

Ryan
źródło
3

Miałem ten problem podczas pracy z Django, używam brewdo instalowania wielu moich programów Open Source i musiałem wykonać następujące czynności, ponieważ brewinstalowałem mysql:

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

Pamiętaj, aby zastąpić je swoją wersją bibliotek!

Addiction2Code
źródło
3

bundle install mysql --forcepomogło mi. Ponownie zainstalował zależności, które zniknęły w wyniku brew uninstall mysql.

Aram
źródło
Unknown switches '--force'
Arnold Roa
2

Jonty, ja też mam z tym problem.

Myślę, że jest tu wskazówka:

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)

Zauważ, że ścieżka do dylibu jest raczej krótka?

Próbuję dowiedzieć się, gdzie instrukcje instalacji klejnotów opuszczają ścieżkę dylib, ale działa powoli, ponieważ sam nigdy nie zbudowałem klejnotu.

Wyślę więcej, jeśli znajdę więcej!

tobinjim
źródło
2

Miałem ten sam problem kilka dni temu. W końcu udało mi się to rozwiązać. Nie jestem do końca pewien jak, ale i tak powiem ci, co zrobiłem. Może ci to pomoże.

Zacząłem od pobrania RVM. Jeśli jeszcze go nie używasz, gorąco polecam. Zasadniczo tworzy piaskownicę dla nowej osobnej instalacji Ruby, RoR i RubyGems. W rzeczywistości możesz mieć wiele instalacji jednocześnie i natychmiast przełączać się między sobą. To działa jak urok.

Dlaczego to jest przydatne? Ponieważ nie powinieneś zadzierać z domyślną instalacją Ruby w OS X. System zależy od tego. Najlepiej po prostu zostawić domyślną instalację Ruby i RoR w spokoju i utworzyć nową przy użyciu RVM, której można użyć do własnego rozwoju.

Po utworzeniu mojej osobnej instalacji Ruby, właśnie zainstalowałem RoR, RubyGems i mysql i działało. Dokładne kroki, które podjąłem, zobacz moje pytanie: Instalowanie Railsów, MySQL itp. Wszystko idzie nie tak

Ponownie: nie wiem na pewno to rozwiąże twój problem. Ale z pewnością to załatwiło sprawę, a w każdym razie użycie RVM jest wysoce zalecane.

Rits
źródło
2

Nadal zauważyłem, że z powyższymi rozwiązaniami nie działało (na przykład) z wtyczką Rails dla TextMate. Wystąpił podobny błąd (podczas pobierania schematu bazy danych).

Więc co się stało, otwórz terminal:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Zastąp mysql-5.5.8-osx10.6-x86_64 własną ścieżką (lub mysql).

To powoduje, że symbol łączy się z lib, teraz railsy uruchamiają się z linii poleceń, a także wtyczki TextMate, takie jak ruby-on-rails-tmbundle .

Żeby było jasne: naprawia to również błąd, który pojawia się podczas uruchamiania serwera Railsowego.

zrozumiałem
źródło
2

Zwykle dzieje się tak po uaktualnieniu mysql. Zainstalowany klejnot mysql2, który został zbudowany na starych bibliotekach mysql, nie może działać z nowymi bibliotekami. Wystarczy go ponownie zainstalować.

Odinstaluj mysql2 przy pomocy gem uninstall mysql2. Następnie zainstaluj za pomocągem install mysql2

longkt90
źródło
1

Rozwiązałem go, tworząc plik .rvmrc w folderze projektu, zawierający:

rvm use <yourrubie>

następnie wpisując ścieżkę projektu

cd ~/myprojectpath

wtedy biegnę

bundle install
Tomasz Mazur
źródło
1

Moja wersja polecenia luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Pasażer 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

Jeśli próbujesz wielu różnych linków, tak jak ja, zrób porządek z:

sudo unlink /usr/lib/libmysqlclient.18.dylib

AlexJ
źródło
1

Otwórz terminal i uruchom następujące czynności:

export PATH=$PATH:/usr/local/mysql/bin

To powinno działać.

Slipstream
źródło
1
To zadziałało, dziękuję !!! Miałem problem z uruchomieniem Django na Visual Studio Code. Wciąż pojawia się błąd, czy zainstalowałem mysqlclient na virtualenv.
Irshu
0

Jeśli używasz OSX i zainstalowałeś mysql przy użyciu brew, możesz:

brew link mysql

Jeśli masz problemy z wersją (miałem uruchomiony mysql 5.7, a mój klejnot wymagał 5.6.25), możesz

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
źródło
0

Dla mnie musiałem ręcznie odinstalować mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Dillawes0me
źródło