库未加载:尝试使用mysql2 gem在OS X 10.6上运行'rails server'时出现libmysqlclient.16.dylib错误

Jon*_*ook 206 mysql rubygems ruby-on-rails webrick

我一直在努力解决这个问题.

我在Snow Leopard机器上安装了Rails 3,gem,mysql.一切顺利,直到我创建了我的第一个项目并试图运行

rails server
Run Code Online (Sandbox Code Playgroud)

运行这个我得到:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 
Run Code Online (Sandbox Code Playgroud)

据我所知,问题在于mysql2 gem.MySQL似乎运行正常,我的Gemfile引用了mysql2,我的database.yml文件似乎还可以.

错误提到

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
Run Code Online (Sandbox Code Playgroud)

但是

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb
Run Code Online (Sandbox Code Playgroud)

MySQL2.bundle在那里!?

如果我使用旧的mysql gem,WEBrick就可以了.但这不是理想的,是吗?

我试过谷歌可以给我的一切!任何帮助非常感谢.

blo*_*ess 392

我从来没有能够得到任何这些答案为我工作,但这是我用来使它适合我的命令.这样,每次更新mysql时都不需要使用install_name_tool

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

  • 对于那些好奇的人来说,这个命令会产生从第二个位置到第一个位置的符号链接.当gem在`/ usr/lib`下查找MySQL客户端库时,该链接将解析到它实际安装的位置.在OS X上,它通常在`/ usr/local/mysql/lib`下,这是该命令链接到的地方.如果您的lib安装在其他位置,则需要调整此命令.键入`locate libmysqlclient.18.dylib`并将结果替换为`-s`后的第一个参数. (12认同)
  • 这是解决该问题的最简单,最正确的方法. (11认同)
  • 这对我来说非常合适 - 谢谢luviss! (2认同)
  • 谢谢你.上面标记的答案仅适用于一个站点,但这是永久性的.它的'bet'. (2认同)

Jon*_*ook 93

我终于解决了这个问题!

我在RVM下重新安装了Ruby和Rails.我使用的是Ruby版本1.9.2-p136.

在rvm下重新安装后,此错误仍然存​​在.

最后解决它的魔术命令是:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他人!

  • 谢谢!我需要一个稍微不同的命令,我的Mac OS X Lion运行RVM 1.6.4,使用Ruby 1.9.2-p180,mysql2 gem 0.3.10:**`sudo install_name_tool -change libmysqlclient.18.dylib/usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle`** (7认同)
  • 谢谢,这对我来说.对于有相同问题的其他人,如果你使用rvm然后跳过sudo,否则权限可能会改变. (2认同)
  • 即使您没有使用RVM,magic命令也能工作 - 只需将最后一个参数更改为指向安装宝石的地方的"mysql2-0.2.6/lib/mysql2/mysql2.bundle"即可. (2认同)
  • 非常感谢.你怎么想到这个? (2认同)

ndu*_*sis 88

这个修复程序对我很有用:

将以下内容添加到〜/ .profile中

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-rails-3/


Luk*_*uke 39

对我来说这只是因为我升级了mysql但没有更新mysql2宝石 - 重新安装宝石将修复它...

gem pristine mysql2


小智 26

我有同样的问题.看起来它无法找到libmysqlclient库.对我有用的临时修复如下:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/
Run Code Online (Sandbox Code Playgroud)

我不确定配置在哪里指定加载路径或它设置的内容但我的mysql安装似乎不在其中.如果我找到一个更永久的解决方案,我会再次发布.

编辑:实际上修复似乎更准确地解决了问题.


小智 24

将以下内容添加到您的~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

这对我有用


Son*_*hew 17

在执行此操作时,在OSX El Capitan更新中:

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

它会抛出一个错误

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

所以为了避免这种情况,你可以做的是首先libmysqlclient.18.dylib使用命令找到它

User$ locate libmysqlclient.18.dylib
Run Code Online (Sandbox Code Playgroud)

在我的情况下它返回 /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

所以usr/lib/我们不会usr/local/lib/像这样创建符号链接:

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

更多详情:https://forums.developer.apple.com/thread/7935


小智 13

以下行适合我.我正在使用mac 10.7.2.

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


小智 11

刚遇到这个问题.我所要做的就是卸载mysql2 gem并重新安装它.希望这适用于其他人


Rit*_*its 2

几天前我也遇到过同样的问题。我最终设法解决了它。我不太确定怎么做,但无论如何我都会告诉你我做了什么。也许它会对你有帮助。

我首先下载了 RVM。如果您尚未使用它,我强烈建议您这样做。它基本上为 Ruby、RoR 和 RubyGems 的新单独安装创建了一个沙箱。事实上,您可以同时进行多个安装并立即切换到另一个。它就像一个魅力。

为什么这有用?因为您不应该弄乱 OS X 中默认的 Ruby 安装。系统依赖于它。最好只保留默认的 Ruby 和 RoR 安装,并使用 RVM 创建一个新的安装,您可以将其用于您自己的开发。

创建单独的 Ruby 安装后,我只安装了 RoR、RubyGems 和 mysql,它就可以工作了。有关我采取的具体步骤,请参阅我的问题:安装 Rails、MySQL 等,一切都出错了

再次:我不确定这是否能解决您的问题。但它确实对我有用,并且无论如何,强烈推荐使用 RVM。