Ruby:mysql2-Gem 不工作(Mac OS X Snow Leopard,Ruby 1.9.2)

Posted

技术标签:

【中文标题】Ruby:mysql2-Gem 不工作(Mac OS X Snow Leopard,Ruby 1.9.2)【英文标题】:Ruby: mysql2-Gem not working (Mac OS X Snow Leopard, Ruby 1.9.2) 【发布时间】:2011-07-23 17:40:18 【问题描述】:

我刚刚编译了 ruby​​ 并安装了 ruby​​gems、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): 库未加载: libmysqlclient.18.dylib (LoadError) 引用自:/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 原因:找不到图像 - /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' 来自 /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' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:120:in `require' 来自 /Users/filzo/Documents/rails/blog/config/application.rb:7:in `' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `require' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `block in' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `tap' 来自 /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `' 来自脚本/rails:6:in `require' 来自脚本/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 

无论如何;是 MySQL 还是 ruby​​ 代码中的错误?

【问题讨论】:

你的修复也对我有用。我不得不将“1.9.1”更改为“1.8”,并且我的 Ruby 副本安装在根库中,而不是本地库中,但它可以工作。哇! 你用的是什么mysql版本? 【参考方案1】:

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

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

【讨论】:

神奇队长。尝试此操作后,我不再能够登录 mysql。不断收到拒绝访问错误...【参考方案2】:

这似乎是一个已知(且未修复!)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:

$ gem uninstall mysql2
$ gem install mysql2

...将获取对库的更改,并且一切都应该正常工作,而无需修改任何环境变量。

【讨论】:

谢谢,这对我最有效!希望 mysql 二进制发行版能够得到修复。【参考方案3】:

如果您在 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 版本不同,也可以更改。

【讨论】:

打印install_name_tool: can't open file: /Users/my_name/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle (No such file or directory) 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 由于他们概述的原因,使用下面的install_name_tool -id 命令是更好的解决方案。【参考方案4】:

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib

或者,因为我也安装了 Oracle Instant Client,所以:

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

【讨论】:

【参考方案5】:

尝试建立这个符号链接,以便 rake 可以找到正确的 MySQL 客户端库。

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

【讨论】:

【参考方案6】:

我不确定这是否有帮助,但我使用的是 OS X 10.7.1 Lion。就我而言,我打开了一个终端窗口,转到 /Library/Ruby/Gems/1.8/gems/mysql2-0.3.7 ,当我这样做时,RVM 就大声说它遇到了一个新的或修改过的 .rvmrc 文件。该文件的内容是:

rvm use 1.9.2@mysql2 --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 

一旦我这样做了,我就准备走了。希望这会有所帮助!

【讨论】:

以上是关于Ruby:mysql2-Gem 不工作(Mac OS X Snow Leopard,Ruby 1.9.2)的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mac 上设置 ruby​​-selenium Webdriver

如何让 XAMPP 的 MySQL 和 Ruby on Rails 在我的 Mac 上协同工作?

如何在 mac 上安装 therubyracer? “gem install therubyracer -v”不工作

Mac os 10.11 更新ruby

MAC电脑安装cocoapods ruby 2.6.0 权限问题

mac 10.11.6,Xcode8下,ruby2.3安装,Cocoapods安装~