Mysql
 sql >> Datenbank >  >> RDS >> Mysql

'undefinierte Methode init für Mysql:Class'

Ich habe Rails 3.1-rc4, MySQL 5.5.15 (gerade aktualisiert) und Mac OS X Lion. Es stellte sich heraus, dass mein Problem darin bestand, dass die Datei mysql_api.bundle mit der richtigen Datei libmysqlclient.18.dylib verknüpft war, aber die Bibliothek nicht gefunden werden konnte:

otool -L ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle 
/Users/rowland/.rvm/gems/ruby-1.9.2-p180/gems/mysql-2.8.1/lib/mysql_api.bundle:
    /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

Zur Laufzeit wird die Bibliothek nicht gefunden. Mein erster Versuch, dies zu beheben, bestand darin, einen LC_RPATH-Befehl hinzuzufügen, aber das war nicht genug (vielleicht, weil er am Ende der Liste stand). Stattdessen habe ich den Bibliothekslink direkt geändert mit:

install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle

Jetzt zeigt mir otool:

otool -L ~/.rvm/gems/ruby-1.9.2-p180\@rails-3.1/gems/mysql-2.8.1/lib/mysql_api.bundle 
/Users/rowland/.rvm/gems/[email protected]/gems/mysql-2.8.1/lib/mysql_api.bundle:
    /Users/rowland/.rvm/rubies/ruby-1.9.2-p180/lib/libruby.1.9.1.dylib (compatibility version 1.9.1, current version 1.9.1)
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)

und alles ist wieder glücklich. Dies funktioniert jedoch nur unter Mac OS X.