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

时间:2010-12-28 14:17:59

标签: mysql ruby-on-rails rubygems webrick

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

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

rails server

运行时我得到:

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$ 

据我所知,问题在于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

然而

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

MySQL2.bundle在那里!?

如果我使用旧的mysql gem,WEBrick会很好。但这不是理想的,是吗?

我已经尝试了谷歌可以给我的一切!任何帮助非常感谢。

24 个答案:

答案 0 :(得分:392)

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

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

答案 1 :(得分: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

希望这有助于其他人!

答案 2 :(得分:88)

此修复程序对我来说非常有效:

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

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

答案 3 :(得分:39)

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

gem pristine mysql2

答案 4 :(得分:26)

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

我不确定配置指定加载路径的位置或设置的位置,但我的mysql安装似乎不在其中。如果我找到更持久的解决方案,我会再次发布。

编辑: 实际上this修正似乎可以更准确地解决问题。

答案 5 :(得分:24)

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

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

这对我有用

答案 6 :(得分:17)

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

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

它会抛出类似

的错误
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

为避免这种情况,您可以先使用命令

找到libmysqlclient.18.dylib
User$ locate libmysqlclient.18.dylib

在我的情况下,它返回了/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

2015-01-01T10:10:09

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

答案 7 :(得分:13)

以下行适合我。我使用的是mac 10.7.2。

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

答案 8 :(得分:10)

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

答案 9 :(得分:4)

这就是我的工作方式:

我跑了下面的命令
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib~ / .rvm / gems / ruby​​-1.9.2-p180 / gems / mysql2-0.2.7 / lib / mysql2 / mysql2.bundle

我的环境:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11,osx10.6(i386)使用readline 5.1

$ ruby​​ -v
ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10.7.0]

希望这有助于某人。

答案 10 :(得分:3)

bundle install mysql --force帮助了我。它重新安装了因brew uninstall mysql而失去的依赖关系。

答案 11 :(得分:3)

我通过删除当前项目的gemset并重新创建它并重新运行bundle install来解决了这个问题。我想我是通过安装更新​​版本的mysql来引起它的。

答案 12 :(得分:3)

使用Django时遇到此问题,我使用brew安装了很多我的开源程序,因为我使用brew来安装mysql,所以我需要执行以下操作:

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

请务必更换您的库版本!

答案 13 :(得分:3)

嗨,这对我来说是推荐的链接from Fredy Andersen

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

只需要在命令中更改为我的mysql版本, 感谢

答案 14 :(得分:3)

谢谢,Ogapo!导出该别名对我有用,然后我按照链接,在我的情况下,mysql2.bundle在/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle中,所以我调整了install_name_tool来修改那个bundle而不是〜/ .rvm中的一个,并按照它应该的方式工作。

现在:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

答案 15 :(得分:2)

Jonty,我也在努力解决这个问题。

我认为这里有一个线索:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

注意dylib的路径是,呃,相当短?

我正在试图找出gem安装说明离开dylib路径的位置,但由于我自己从未构建过gem,因此速度很慢。

如果我找到更多内容,我会发布更多内容!

答案 16 :(得分:2)

这通常发生在升级mysql时。在旧的mysql库上构建的已安装的mysql2 gem无法与新的库一起使用。只需重新安装即可。

使用gem uninstall mysql2卸载mysql2。然后使用gem install mysql2

安装它

答案 17 :(得分:2)

我仍然发现,使用上面的解决方案,它不适用于(例如)使用TextMate的Rails插件。我收到了类似的错误(检索数据库架构时)。

那是什么,打开终端:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

mysql-5.5.8-osx10.6-x86_64 替换为您自己的路径(或mysql)。

这使得符号链接到lib,现在rails从命令行运行,以及TextMate插件,如 ruby​​-on-rails-tmbundle

要明确:这也解决了启动rails服务器时出现的错误。

答案 18 :(得分:2)

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

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

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

一旦我创建了单独的Ruby安装,我就安装了RoR,RubyGems和mysql,并且它有效。对于我采取的确切步骤,请参阅我的问题:Installing Rails, MySQL, etc. everything goes wrong

再说一遍:我不确定这会解决你的问题。但它确实为我做了诀窍,无论如何使用RVM是非常值得推荐的。

答案 19 :(得分:1)

我的luvlss命令版本:

Mac OSX 10.10.5

MySQL 5.6.27

乘客5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

如果你正在尝试许多不同的链接,就像我一样,做一些清理:

sudo unlink /usr/lib/libmysqlclient.18.dylib

答案 20 :(得分:1)

我通过在包含以下内容的项目文件夹中创建.npmrc文件解决了这个问题:

rvm use <yourrubie>

然后进入我的项目路径

cd ~/myprojectpath

然后我跑

bundle install

答案 21 :(得分:0)

如果你正在使用OSX并使用brew安装mysql,你可以:

brew link mysql

如果您遇到版本问题(我的宝石需要5.6.25时运行mysql 5.7),您可以

brew unlink mysql
brew switch mysql 5.6.25

答案 22 :(得分:0)

打开终端并运行以下命令:

export PATH=$PATH:/usr/local/mysql/bin

它应该有用。

答案 23 :(得分:0)

对我来说,我必须手动卸载mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql