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 并安装了 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): 库未加载: 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”不工作