2011-03-27 130 views
21

我刚刚编译了ruby,并安装了rubygems,mysql2和rails,这些工作相当不错。但我得到以下错误消息,每当我试图启动Rails服务器:Ruby:mysql2-Gem无法正常工作(Mac OS X Snow Leopard,Ruby 1.9.2)

 
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError) 
    Referenced from: /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    Reason: image not found - /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:120:in `require' 
    from /Users/filzo/Documents/rails/blog/config/application.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `block in ' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `tap' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `' 
    from script/rails:6:in `require' 
    from script/rails:6:in `' 

我试了几个可能的解决方案(例如此:http://railsforum.com/viewtopic.php?pid=23125#23125与libmysqlclient.18.dylib);但没有为我工作。我希望你能帮助我。

编辑: 看起来这固定我的问题:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

无论如何;这是MySQL或Ruby代码中的错误吗?

+0

您的修补程序也适用于我。我必须将'1.9.1'更改为'1.8',而我的Ruby副本安装在根库中,而不是本地的,但它的工作。活泉! – ericso 2011-03-28 19:08:23

+0

你使用什么mysql版本? – 2011-04-03 16:08:03

回答

12

如果您在Mac OS X上使用RVM(一个很好的选择) - 这是最终为我工作的魔法命令。

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Users/*USERNAME*/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

更换USERNAME在适当的语法根据您的当前设置。 如果你的mysql版本的gem是不同的,那么也是如此。

+2

它打印'install_name_tool:无法打开文件:/Users/my_name/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle(没有这样的文件或目录)' – Kir 2011-06-02 14:24:39

+0

我得到同样的东西 – Francois 2012-03-14 09:49:57

+0

'install_name_tool'似乎是XCode /命令行开发者工具的一部分。这个命令更便携的版本是: 'sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib \'bundle show mysql2 \'/ lib/mysql2/mysql2 .bundle' – iloveitaly 2012-04-18 19:52:35

32

一个简单而最好的办法就是通过命令来创建软链接 -

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

http://rorguide.blogspot.com/2011/07/getting-error-library-not-loaded.html

+1

为我工作。谢谢。 – RSG 2011-11-17 21:53:50

+0

神奇的队长。尝试这个后,我不能再登录到MySQL。继续访问被拒绝的错误... – o01 2011-12-12 14:11:42

+0

对我很好用 – pablo 2012-01-06 23:02:11

3

尽量让这个符号链接,因此耙可以找到正确的MySQL客户端库。

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

2

我不知道这是否会帮助或没有,但我使用OS X 10.7.1狮子。在我的情况下,我打开了一个终端窗口,进入/Library/Ruby/Gems/1.8/gems/mysql2-0.3.7,并且一旦我做了RVM就说它遇到了一个新的或修改过的.rvmrc文件。该文件的内容是:

rvm use [email protected] --create 

它问我是否想要信任这个.rvmc文件。我说是的,它返回以下:

Using /Users/dan/.rvm/gems/ruby-1.9.2-p290 with gemset mysql2 

一旦做了,我跑以下命令:

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

一旦我做到了,我被订走。希望这可以帮助!

4

install_name工具的更好替代方法是将mysql lib的路径添加到DYLD_LIBRARY_PATH环境变量中。在/ etc/profile文件:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 

或者,因为我有Oracle即时客户端装好,这样做:

export ORACLE_HOME="/usr/local/oracle/instantclient_10_2" 
export DYLD_LIBRARY_PATH=$ORACLE_HOME 
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib 
14

这似乎是一个已知的bug in the MySQL binary distribution(和不固定的!)。

虽然在你的mysql2.bundle文件上运行install_name_tool可以工作,但如果你删除并重建它们,你又回到了原点。此外,您必须将此修补程序应用于与其链接的其他任何内容。一个更好的解决方法是修复在库本身的问题:

$ sudo install_name_tool -id \ 
    /usr/local/mysql/lib/libmysqlclient.18.dylib \ 
    /usr/local/mysql-5.5.12-osx10.6-x86_64/lib/libmysqlclient.18.dylib 

拆除和重建mysql2宝石:

$ gem uninstall mysql2 
$ gem install mysql2 

...会拿起变化到库中,一切都没有问题正确,而不必修改任何环境变量。

+0

谢谢,这对我最合适!希望mysql二进制发行版能够得到修复。 – 2012-02-25 14:53:51

相关问题