Ruby:mysql2-Gem无法正常工作(Mac OS X Snow Leopard,Ruby 1.9.2)

Phi*_*hil 24 ruby mysql gem ruby-on-rails

我刚刚编译了ruby并安装了rubygems,mysql2和rails,它们工作得很好.但每当我尝试启动rails服务器时,我都会收到以下错误消息:

/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 with 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 
Run Code Online (Sandbox Code Playgroud)

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

Rit*_*mar 32

一种简单而最好的方法是通过命令创建软链接 -

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Run Code Online (Sandbox Code Playgroud)

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


Guy*_*ing 15

这似乎是MySQL二进制发行版中已知(并且未修复!)的错误.

虽然运行install_name_tool你的mysql2.bundle文件会起作用,如果你删除并重建它们,你就会回到原点.此外,您必须将此修复程序应用于链接它的任何其他内容.更好的解决方案是解决库本身的问题:

$ 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
Run Code Online (Sandbox Code Playgroud)

删除并重建mysql2 gem:

$ gem uninstall mysql2
$ gem install mysql2
Run Code Online (Sandbox Code Playgroud)

...将获取对库的更改,一切都应该正常工作,而不必修改任何环境变量.


小智 13

如果您在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
Run Code Online (Sandbox Code Playgroud)

根据您当前的设置,在语法中替换USERNAME.如果您的mysql gem版本不同,那么也会改变.

  • 它打印`install_name_tool:无法打开文件:/Users/my_name/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle(没有这样的文件或目录)` (2认同)