2010-12-22 5 views
36

Ich erhalte den folgenden Fehler zu starten, wenn ich starten Schienen Server:Schienen-Server schlägt mit mysql2 mit rvm & ruby ​​1.9.2-p0 auf OSX 10.6.5

$ rails server 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require':  dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) 
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle 
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-  
0.2.6/lib/mysql2/mysql2.bundle 

Ich habe installiert mysql2 mit mit dem folgenden Befehl nach dem rvm Verwendung rubin 1.9.2-p0 Befehl:

$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config 
Building native extensions. This could take a while... 
Successfully installed mysql2-0.2.6 
1 gem installed 
Installing ri documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 
Installing RDoc documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 

ich mysql2 in meinem Gemfile haben sowie in der database.yml Datei und installieren Sie bündeln vervollständigt Fein

$ bundle show mysql2 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6 

Ich verstehe den Rails-Serverfehler liegt daran, dass er den Speicherort von mysql_config auf OSX nicht kennt, aber bei der Installation von Juwelen habe ich den korrekten Speicherort angegeben. Doch das Juwel von RVM respektiert diesen mysql_config-Ort anscheinend nicht.

Hat jemand eine Lösung?

Antwort

22

ich die Antwort hier: Mysql 5.5, Snow leopard and rails

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
+1

Das Problem dabei ist, Die Lösung besteht darin, dass Sie jedes Mal, wenn Sie den Edelstein neu installieren (ein Beispiel: in einem anderen RVM-Edelstein), den Befehl 'install_name_tool' wiederholen müssen. Sébastiens Antwort, die auf meinen Blogbeitrag verweist, bietet meiner Meinung nach eine sauberere Lösung. –

+0

Beachten Sie, dass sich auch die Bibliotheksversion ändert - derzeit ist es libmysqlclient.18.dylib (statt 16), das an beiden Stellen oben eingefügt werden muss. – scotchi

5

Bill,

Frederic Antwort wird dieses Problem lösen, aber Sie können einige der Elemente in dem Befehl abhängig von Versionen und wie die Dinge sich ändern müssen sind auf Ihrem System benannt.

Zum Beispiel, auf der neuesten Version von mysql libmysqlclient.16.dylib ist eigentlich libmysqlclient.18.dylib. Versuchen Sie, ein tun:

locate libmysqlclient.18.dylib 

Wenn das nicht den Weg zurückkehrt können Sie auf:

/usr/local/{your-mysql}/lib 

die Datei zu finden. Dann nur ein PWD, um das richtige Verzeichnis für den Befehl zu finden.

Sie müssen auch bestimmen, was die tatsächlichen Paketnamen der Rubine sind, die Sie installiert haben. Sie dies durch die Verwendung

rvm info 

Zum Beispiel finden, meine Installation von 1.9.2 ist rubin 1.9.2.p180, nicht rubin 1.9.2p0. Dies muss auch in Frederics Befehl geändert werden.

Also, für mich Frederic Befehl wurde die rvm Rubine für 1.8.7 und 1.9.2 zur Befestigung jeweils:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
63

Das Problem aus dem mysql2 Juwel kommt die dynamische Bibliothek von MySQL fehlt.

Eine sauberere Lösung als install_name_tool ... müsste Ihre DYLD_LIBRARY_PATH aktualisieren, um MySQL-Bibliotheken hinzuzufügen. Um dies zu tun, aktualisieren Sie Ihre ~/.bash_profile die MySQL-Bibliothek Ordner hinzufügen:

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

Hinweis: Vielleicht möchten Sie die MySQL-Standort aktualisieren, basierend auf Ihrer installieren

Diese Dinge sauber halten sollte, sondern auch dafür sorgen, dass Jeder Edelstein oder Code, der dynamische MySQL-Bibliotheken benötigt, findet sie.

Referenz: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Reference Update Juli 2012: Eine Änderung in OS X 10.8 macht die einfache Methode, über weniger elegant. Wenn Sie diese Variable gesetzt, jedes Mal, wenn ein setuid oder setgid-Programm ausführen, können Sie diese Warnung auf stderr erhalten:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

Ruby-Entwickler mit Phusion Passagiere Standalone sieht diese Meldung alle fünf Sekunden in der Konsole angezeigt. Es wird sehr irritierend, sehr schnell.

Ich habe einen Fehler mit Apple eingereicht. Es ist auch bei OpenRadar.

In der Zwischenzeit gibt es auch noch eine dritte Möglichkeit, das Client-Bibliothek Pfad Problem zu beheben, die nicht DYLD_LIBRARY_PATH Einstellung erfordert (Arbeits, um dieses Problem 10.8) oder Hacking .bundle Dateien mit install_name_tool:

$ brew install mysql 
+0

funktioniert für mich mit RVM, Gemset und so weiter. –

+0

Dies wird nicht funktionieren, wenn Sie Pow oder Passagier verwenden, verwenden Sie Frederics Antwort oben, um es zur Arbeit zu bringen ... stellen Sie sicher, es auf dem 'ext' Ordner in der Edelstein basedir sowie – concept47

+0

hat den Trick für mich ausgeführt OSX 10.7, rvm ruby ​​1.9.3; Vielen Dank! – marcgg

0

hier ist, was ich tun (ähnlich anderen)

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle 
1

Meins war in einem anderen Ort, hatte ich zu verwenden:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle. 
3

unten über: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

-Update Juli 2012:

Eine Änderung in OS X 10.8 macht die einfache Methode, über weniger elegant. Wenn Sie diese Variable gesetzt, jedes Mal, wenn ein setuid oder setgid-Programm ausführen, können Sie diese Warnung auf stderr erhalten:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

Ruby-Entwickler mit Phusion Passagiere Standalone sieht diese Meldung alle fünf Sekunden in der Konsole angezeigt. Es wird sehr irritierend, sehr schnell.

Ich habe einen Fehler mit Apple eingereicht. Es ist auch bei OpenRadar.

In der Zwischenzeit gibt es auch noch eine dritte Möglichkeit, das Client-Bibliothek Pfad Problem zu beheben, die nicht DYLD_LIBRARY_PATH Einstellung erfordert (Arbeits, um dieses Problem 10.8) oder Hacking .bundle Dateien mit install_name_tool:

$ brew install mysql 
8

Auf OS X 10.8 (Mountain Lion) haben die aufgeführten Antworten alle Probleme, wie in den Antworten und Kommentaren angegeben.

  • DYLD_LIBRARY_PATH Einstellung schließen/usr/local/mysql/lib gibt Warnungen von OS X und brauen
  • install_name_tool Verwendung zu hacken, wo die Edelstein binäre Aussehen jedes Mal erneuert werden müsste das Juwel installiert ist oder aktualisiert.
  • Wechsel zu brew 's mysql funktioniert möglicherweise nicht; und in jedem Fall möchte ich nicht eine bereits funktionierende Installation

Eine einfachere und robustere Lösung IMHO neu zu konfigurieren ist ein Link auf die Bibliothek in der dynamischen Standardbibliothekssuchpfad zu bringen, die bequem /usr/local/lib umfasst.Das ist:

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

fantastisch, ich versuchte alle oben genannten und dieses arbeitete sofort – ttati

+0

Arbeitete für mich auch, danke! – thomallen

0

Ich steckte darauf für eine Weile und kam zu einer anderen Lösung.

Beachten Sie, wie die fehlende Bibliothek ist Version 16:

Bibliothek nicht geladen: libmysqlclient.16.dylib (Loaderror)

stellte sich heraus, hatte ich Version 20 der Bibliothek - libmysqlclient.20.dylib

Ich hatte korrekt gem 'mysql2' in meinem Gemfile, aber was ich tun musste, war die Edelstein, gem uninstall mysql (ich hatte mehrere ve rssionen des Gem installiert) und dann eine neue bundle install zu nur die Version, die ich von dieser Bibliothek benötigt.

Danach wurde nach der richtigen Version gesucht und gefunden.

0

Upgraded mysql auf die neueste Version und installieren mysql2 gem arbeitet mir brew upgrade mysql gem uninstall mysql2 gem install mysql2

BTW: Meine MySQL-Version 5.7.18 ist, mysql2 gem Version 0.4.5

Verwandte Themen