Mysql
 sql >> Base de données >  >> RDS >> Mysql

'init de méthode indéfinie pour Mysql:Class'

J'ai Rails 3.1-rc4, MySQL 5.5.15 (juste mis à jour) et Mac OS X Lion. Mon problème s'est avéré être que le fichier mysql_api.bundle était lié au bon fichier libmysqlclient.18.dylib, mais il n'a pas pu trouver la bibliothèque :

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)

Lors de l'exécution, la bibliothèque est introuvable. Ma première tentative pour résoudre ce problème a été d'ajouter une commande LC_RPATH, mais cela n'a pas suffi (peut-être parce que c'était à la fin de la liste). Au lieu de cela, j'ai directement changé le lien de la bibliothèque avec :

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

Maintenant otool me montre :

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)

et tout est à nouveau heureux. Cela ne fonctionne cependant que sur Mac OS X.