Bibliothek nicht geladen: libmysqlclient.16.dylib-Fehler beim Versuch, 'Rails Server' unter OS X 10.6 mit mysql2 gem auszuführen

206

Ich habe seit einiger Zeit damit zu kämpfen.

Ich habe Rails 3, gem, mysql auf meiner Snow Leopard-Maschine installiert. Alles lief gut, bis ich mein erstes Projekt erstellte und versuchte zu laufen

rails server

Beim Ausführen bekomme ich:

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$ 

Soweit ich das beurteilen kann, liegt das Problem beim mysql2-Juwel. MySQL scheint gut zu laufen und meine Gemfile verweist auf mysql2, meine database.yml-Datei scheint auch in Ordnung zu sein.

Der Fehler erwähnt

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

Und doch

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 ist da!?

Wenn ich das alte MySQL-Juwel verwende, bootet WEBrick einwandfrei. Aber das ist nicht ideal, oder?

Ich habe alles versucht, was Google mir geben kann! Jede Hilfe sehr geschätzt.

Jonty Brook
quelle

Antworten:

393

Ich konnte nie eine dieser Antworten für mich arbeiten lassen, aber dies ist der Befehl, mit dem ich sie für mich arbeiten ließ. Auf diese Weise müssen Sie install_name_tool nicht jedes Mal verwenden, wenn Sie Ihre MySQL aktualisieren

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
bloveless
quelle
11
Das ist der einfachste und richtige Weg, um dieses Problem zu lösen.
Voldy
2
Danke dafür. Die oben markierte Antwort funktionierte nur für eine Site, aber dies funktionierte dauerhaft. Es ist Mo 'Betta.
Fregas
12
Für diejenigen, die neugierig sind, was los ist, stellt dieser Befehl eine symbolische Verknüpfung vom zweiten zum ersten Ort her. Wenn das Juwel unter nach der MySQL-Clientbibliothek sucht /usr/lib, wird dieser Link zu dem Speicherort aufgelöst, an dem er tatsächlich installiert ist. Unter OS X /usr/local/mysql/libist dies normalerweise der Fall , auf den dieser Befehl verweist. Wenn Ihre Bibliothek an einem anderen Speicherort installiert ist, müssen Sie diesen Befehl anpassen. Geben Sie locate libmysqlclient.18.dylibdas erste Argument nach dem Ergebnis ein und ersetzen Sie es -s.
Siobhán
1
@ Sean D., wenn ich locate libmysqlclient.18.dylib ausführe, erhalte ich diese Ausgabe. 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.Was ist falsch?
GiH
1
@GiH Sie müssen nur den Befehl ausführen, den es Ihnen sagt ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Dadurch wird der Prozess der Indizierung Ihrer Festplatte gestartet, sodass der locateBefehl in Zukunft funktioniert. In den meisten Fällen, aber ich denke , Sie werden das nicht tun müssen, und kann nur mit dem Befehl , dass luvlss Gewähr zur Verfügung gestellt.
Siobhán
93

Ich habe das schließlich gelöst!

Ich habe Ruby and Rails unter RVM neu installiert. Ich verwende Ruby Version 1.9.2-p136.

Nach der Neuinstallation unter rvm war dieser Fehler immer noch vorhanden.

Am Ende war der magische Befehl, der es löste:

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

Hoffe das hilft jemand anderem!

Jonty Brook
quelle
1
Dies hat die Berechtigungen von mysql irgendwie zurückgesetzt und jetzt kann ich mich nicht mehr anmelden ... selbst nachdem ich ein Zurücksetzen des Passworts mit einer Datei durchgeführt habe, wie in den mysql-Dokumenten beschrieben.
Coderama
2
Danke, das hat es für mich getan. Und für andere mit dem gleichen Problem, wenn Sie rvm verwenden, überspringen Sie das sudo, sonst ändern sich wahrscheinlich die Berechtigungen.
DanneManne
2
Der magische Befehl funktioniert auch, wenn Sie kein RVM verwenden. Ändern Sie einfach das letzte Argument, um darauf zu verweisen, mysql2-0.2.6/lib/mysql2/mysql2.bundlewo immer Ihre Edelsteine ​​installiert sind.
Tobias Cohen
2
Ich danke dir sehr. Wie um alles in der Welt haben Sie das herausgefunden?
Derek
7
Danke dir! Ich brauchte einen etwas anderen Befehl für meinen Mac OS X Lion unter RVM 1.6.4 mit 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

Für mich war dies nur, weil ich MySQL aktualisiert hatte, aber den MySQL2-Edelstein nicht aktualisiert hatte - eine Neuinstallation des Edelsteins wird das Problem beheben ...

gem pristine mysql2

Luke
quelle
Dies sollte die ausgewählte Antwort sein.
El Guapo
26

Ich habe das gleiche Problem. Es sieht so aus, als ob die libmysqlclient-Bibliothek nicht gefunden werden kann. Ein vorübergehender Fix, der für mich funktioniert hat, ist der folgende:

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

Ich bin nicht sicher, wo die Konfiguration den Ladepfad angibt oder worauf er eingestellt ist, aber meine MySQL-Installation schien nicht darin enthalten zu sein. Ich werde wieder posten, wenn ich eine dauerhaftere Lösung finde.

Bearbeiten: Tatsächlich scheint dieses Update das Problem genauer zu beheben.

Ogapo
quelle
24

Fügen Sie Folgendes zu Ihrem hinzu ~/.bash_profile:

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

Das hat bei mir funktioniert

DV Dasari
quelle
Ja, funktioniert auf 1.9.3-p448. Schade, dass es keine akzeptierte Antwort ist.
andreimarinescu
17

In OSX El Capitan Update, wenn Sie dies tun:

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

es wirft einen Fehler wie

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

Um dies zu vermeiden, können Sie zunächst libmysqlclient.18.dylibmit dem Befehl suchen

User$ locate libmysqlclient.18.dylib

In meinem Fall kehrte es zurück /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Also werden usr/lib/wir stattdessen einen Symlink erstellen, um Folgendes zu usr/local/lib/mögen:

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

Weitere Details: https://forums.developer.apple.com/thread/7935

Sony Mathew
quelle
1
Auf El Capitan für mich war alles, was Sie brauchten, sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Ich bin froh, dass es jemandem geholfen hat. : D
Sony Mathew
Dies ist die richtige Antwort für elcapitan Ihr Ziel Link sollte auf dem /usr/local/libOrdner sein
Arnold Roa
13

Die folgenden Zeilen funktionieren für mich. Ich benutze Mac 10.7.2.

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

S. Rasel
quelle
1
Dieser hat mein Problem behoben. Vielen Dank!
Justin Bozonier
11

Bin gerade auf dieses Problem gestoßen. Alles was ich tun musste, ist mysql2 gem zu deinstallieren und neu zu installieren. Hoffe das funktioniert für andere Leute

Anh Pham
quelle
1
Auf meinem Computer, auf dem Mavericks ausgeführt wird, habe ich alle Versionen des mysql2-Gems entfernt, indem gem mysql2 deinstalliert und All versionsan der Eingabeaufforderung geantwortet hat . Ich habe dann Brew Upgrade MySQL ausgeführt und dann Gem MySQL2 installiert.
Martin Streicher
4

So hat es bei mir funktioniert:

Ich habe den folgenden Befehl ausgeführt
sudo install_name_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

Meine Umgebungen:
$ Rails -v Rails 3.0.6

$
mysql --version mysql Ver 14.14 Distrib 5.5.11 für osx10.6 (i386) mit readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011-02-18 Revision 30909) [x86_64-darwin10.7.0]

Hoffe das hilft jemandem.

DV Dasari
quelle
3

Danke, Ogapo! Das Exportieren dieses Alias ​​funktionierte für mich, und dann folgte ich dem Link, und in meinem Fall befand sich das mysql2.bundle in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle Ich habe das install_name_tool angepasst, um dieses Bundle anstelle eines in ~ / .rvm zu ändern, und habe dafür gesorgt, dass es so funktioniert, wie es gemacht werden sollte.

Also jetzt:

   $ 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
quelle
3

Hallo, es hat bei mir über den empfohlenen Link von Fredy Andersen funktioniert

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

Ich musste nur auf meine Version von MySQL umsteigen, im Befehl, danke

manuelBetancurt
quelle
3

Ich habe dieses Problem gelöst, indem ich mein Gemset für mein aktuelles Projekt gelöscht und neu erstellt und die Bundle-Installation erneut ausgeführt habe. Ich glaube, ich habe es durch die Installation einer neueren Version von MySQL verursacht.

Ryan
quelle
3

Ich hatte dieses Problem bei der Arbeit mit Django. Ich habe brewviele meiner Open Source-Programme installiert und musste seit der brewInstallation Folgendes tun mysql:

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

Achten Sie darauf, durch Ihre Version der Bibliotheken zu ersetzen!

Addiction2Code
quelle
3

bundle install mysql --forcehalf mir. Es wurden Abhängigkeiten neu installiert, die als Folge davon verschwunden sind brew uninstall mysql.

Aram
quelle
Unknown switches '--force'
Arnold Roa
2

Jonty, ich kämpfe auch damit.

Ich denke, hier gibt es einen Hinweis:

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)

Beachten Sie, dass der Weg zur Dylib ziemlich kurz ist.

Ich versuche herauszufinden, wo die Anweisungen zur Edelsteininstallation vom Dylib-Pfad abweichen, aber es geht langsam voran, da ich selbst noch nie einen Edelstein gebaut habe.

Ich werde mehr posten, wenn ich mehr finde!

Tobinjim
quelle
2

Ich hatte vor ein paar Tagen genau das gleiche Problem. Ich habe es schließlich geschafft, es zu lösen. Ich bin mir nicht ganz sicher, wie, aber ich werde dir trotzdem sagen, was ich getan habe. Vielleicht hilft es dir.

Ich habe zunächst RVM heruntergeladen. Wenn Sie es noch nicht verwenden, kann ich es nur empfehlen. Grundsätzlich wird eine Sandbox für eine neue separate Installation von Ruby, RoR und RubyGems erstellt. Tatsächlich können Sie mehrere Installationen gleichzeitig durchführen und sofort zueinander wechseln. Es wirkt wie ein Zauber.

Warum ist das nützlich? Weil Sie sich nicht mit der Standardinstallation von Ruby in OS X herumschlagen sollten. Das System hängt davon ab. Lassen Sie die Standardinstallation von Ruby und RoR am besten in Ruhe und erstellen Sie eine neue mit RVM, die Sie für Ihre eigene Entwicklung verwenden können.

Nachdem ich meine separate Ruby-Installation erstellt hatte, habe ich nur RoR, RubyGems und MySQL installiert und es hat funktioniert. Die genauen Schritte, die ich unternommen habe, finden Sie in meiner Frage: Installieren von Rails, MySQL usw. Alles läuft schief

Nochmals: Ich weiß nicht genau, ob dies Ihr Problem lösen wird. Aber es hat sicherlich den Trick für mich getan, und auf jeden Fall ist die Verwendung von RVM sehr zu empfehlen.

Rits
quelle
2

Ich habe immer noch festgestellt, dass es mit den oben genannten Lösungen (zum Beispiel) mit dem Rails-Plugin für TextMate nicht funktioniert hat. Ich habe einen ähnlichen Fehler erhalten (beim Abrufen des Datenbankschemas).

Also, was hat getan, offenes Terminal:

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

Ersetzen Sie mysql-5.5.8-osx10.6-x86_64 durch Ihren eigenen Pfad (oder mysql).

Dies stellt eine Symbolverknüpfung zur Bibliothek her, jetzt werden Rails über die Befehlszeile ausgeführt sowie TextMate-Plugins wie Ruby-on-Rails-TMBundle .

Um es klar auszudrücken: Dies behebt auch den Fehler, den Sie beim Starten des Rails-Servers erhalten.

Roger
quelle
2

Dies passiert normalerweise, wenn Sie MySQL aktualisieren. Das installierte mysql2-Gem, das auf den alten mysql-Bibliotheken erstellt wurde, kann nicht mit neuen Bibliotheken funktionieren. Ich muss es nur neu installieren.

Deinstallieren Sie mysql2 mit gem uninstall mysql2. Dann installieren Sie es mitgem install mysql2

longkt90
quelle
1

Ich habe es behoben, indem ich eine .rvmrc-Datei in meinem Projektordner erstellt habe, die Folgendes enthält:

rvm use <yourrubie>

Geben Sie dann meinen Projektpfad ein

cd ~/myprojectpath

dann renne ich

bundle install
Tomasz Mazur
quelle
1

Meine Version von luvlss 'Befehl:

Mac OSX 10.10.5

MySQL 5.6.27

Passagier 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

Wenn Sie wie ich viele verschiedene Links ausprobieren, räumen Sie auf mit:

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

AlexJ
quelle
1

Öffnen Sie ein Terminal und führen Sie Folgendes aus:

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

Es sollte funktionieren.

Windschatten
quelle
1
Das hat den Job gemacht, danke !!! Ich hatte Probleme, Django auf Visual Studio Code auszuführen. Erhält immer wieder die Fehlermeldung, ob ich mysqlclient auf virtualenv installiert habe.
Irshu
0

Wenn Sie OSX verwenden und MySQL mit Brew installiert haben, können Sie:

brew link mysql

Wenn Sie Probleme mit der Version haben (ich hatte MySQL 5.7 ausgeführt, während mein Edelstein 5.6.25 benötigt), können Sie

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
quelle
0

Für mich musste ich mysql manuell deinstallieren

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Dillawes0me
quelle