首页 文章

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

提问于
浏览
204

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

我在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 回答

  • 3

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

    将以下内容添加到〜/ .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/

  • 26

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

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

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

    gem pristine mysql2

  • 2

    我终于解决了这个问题!

    我在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
    

    希望这有助于其他人!

  • 17

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

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

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

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

  • 4

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

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

    这对我有用

  • 1

    在执行此操作时,在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/local/lib/ 而不是 usr/lib/ ,如下所示:

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

    更多细节:https://forums.developer.apple.com/thread/7935

  • 0

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

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

  • 13

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

  • 2

    这是它对我有用的方式:

    我跑了下面的命令
    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]

    希望这有助于某人 .

  • 0

    谢谢,Ogapo!导出该别名对我有用,然后我按照链接,在我的情况下,mysql2.bundle在/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle中,所以我调整了install_name_tool以修改该包而不是〜/ .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)
    
  • 37

    嗨,这对我来说是推荐的链接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版本,谢谢

  • 92

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

  • 3

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

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

    请务必更换您的库版本!

  • 24

    bundle install mysql --force 帮助了我 . 它重新安装了由于 brew uninstall mysql 而导致的依赖关系 .

  • 0

    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 .

    如果我发现,我会发布更多更多!

  • 3

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

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

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

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

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

  • 2

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

    那是什么,打开终端:

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

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

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

    需要说明的是:这也解决了启动rails服务器时出现的错误 .

  • 3

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

    使用 gem uninstall mysql2 卸载mysql2 . 然后用 gem install mysql2 安装它

  • 2

    我通过在我的项目文件夹中创建.rvmrc文件来解决它:

    rvm use <yourrubie>
    

    然后进入我的项目路径

    cd ~/myprojectpath
    

    然后我跑了

    bundle install
    
  • 87

    我的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

  • 3

    如果您使用OSX并使用brew安装了mysql,您可以:

    brew link mysql
    

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

    brew unlink mysql
    brew switch mysql 5.6.25
    
  • 1

    打开 Terminal 并运行以下命令:

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

    它应该工作 .

  • 392

    对我来说,我不得不手动卸载mysql

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

相关问题