【问题标题】:Library not loaded: libmysqlclient.16.dylib error when trying to run 'rails server' on OS X 10.6 with mysql2 gem未加载库:尝试使用 mysql2 gem 在 OS X 10.6 上运行“rails server”时出现 libmysqlclient.16.dylib 错误
【发布时间】:2011-05-31 14:36:08
【问题描述】:

我已经为此苦苦挣扎了一段时间。

我在我的 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 可以正常启动。但这并不理想,不是吗?

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

【问题讨论】:

    标签: mysql ruby-on-rails rubygems webrick


    【解决方案1】:

    我从来没有得到任何对我有用的答案,但这是我用来让它对我有用的命令。这样你就不需要每次更新 mysql 时都使用 install_name_tool

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

    【讨论】:

    • 这是解决该问题的最简单和正确的方法。
    • 感谢您。上面标记的答案仅适用于一个站点,但这永久有效。它的斗鱼。
    • 对于那些好奇发生了什么的人,这个命令会建立一个从第二个位置到第一个位置的符号链接。当 gem 在/usr/lib 下查找 MySQL 客户端库时,该链接将解析到它实际安装的位置。在 OS X 上,它通常位于 /usr/local/mysql/lib 下,这是此命令链接到的位置。如果你的库安装在不同的位置,你需要调整这个命令。键入locate libmysqlclient.18.dylib 并将结果替换为-s 之后的第一个参数。
    • @Sean D.,当我运行 locate libmysqlclient.18.dylib 我得到这个输出 WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear. 怎么了?
    • @GiH 您只需要运行它告诉您的命令 (sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist)。这将开始索引您的硬盘驱动器的过程,这将使locate 命令在未来工作。不过,在大多数情况下,我认为您不需要这样做,只需使用 luvlss 提供的命令即可。
    【解决方案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
    

    希望这对其他人有帮助!

    【讨论】:

    • 这以某种方式重置了 mysql 的权限,现在我无法登录...即使使用 mysql 文档中描述的文件执行密码重置。
    • 谢谢,这是为我做的。而对于其他有同样问题的人,如果你使用 rvm 然后跳过 sudo,否则权限可能会改变。
    • 即使您不使用 RVM,魔术命令也可以工作 - 只需将最后一个参数更改为指向您的 gem 安装位置的 mysql2-0.2.6/lib/mysql2/mysql2.bundle
    • 非常感谢。你到底是怎么想出来的?
    • 谢谢!对于运行 RVM 1.6.4 和 Ruby 1.9.2-p180、mysql2 gem 0.3.10 的 Mac OS X Lion,我需要一个稍微不同的命令: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
    【解决方案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/

    【讨论】:

    • 非常感谢。这对我有用。 (Mac os x 10.6.6i,ruby 1.9.3p327),使用 RVM。
    • 已确认。这就是我必须在 osx Maverick 10.9.1 上添加的所有内容
    【解决方案4】:

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

    gem pristine mysql2

    【讨论】:

    • 这应该是选择的答案。
    【解决方案5】:

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

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

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

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

    【讨论】:

    • 这救了我。非常感谢。
    【解决方案6】:

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

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

    这对我有用

    【讨论】:

    • 是的,适用于 1.9.3-p448。很遗憾这不是一个公认的答案。
    【解决方案7】:

    执行此操作时在 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

    【讨论】:

    • 对我来说,在 El Capitan 上只需要你最后一行:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
    • 很高兴它帮助了某人。 :D
    • 这是 elcapitan 的正确答案,您的目标链接应位于 /usr/local/lib 文件夹中
    【解决方案8】:

    以下内容对我有用。我正在使用 mac 10.7.2。

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

    【讨论】:

    • 这个解决了我的问题。谢谢!
    【解决方案9】:

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

    【讨论】:

    • 在我的机器上,运行 Mavericks,我使用 gem uninstall mysql2 删除了所有版本的 mysql2 gem,并在提示符处回答 All versions。然后我运行 brew upgrade mysql 然后 gem install mysql2.
    【解决方案10】:

    这对我来说是这样的:

    我运行了以下命令
    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

    我的环境:
    $导轨-v 导轨 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]

    希望这对某人有所帮助。

    【讨论】:

      【解决方案11】:

      谢谢,奥加波!导出该别名对我有用,然后我点击链接,在我的情况下,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)
      

      【讨论】:

        【解决方案12】:

        您好,推荐链接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版本, 谢谢

        【讨论】:

          【解决方案13】:

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

          【讨论】:

            【解决方案14】:

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

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

            请务必替换为您的库版本!

            【讨论】:

              【解决方案15】:

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

              【讨论】:

              • Unknown switches '--force'
              【解决方案16】:

              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。

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

              【讨论】:

                【解决方案17】:

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

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

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

                创建单独的 Ruby 安装后,我只安装了 RoR、RubyGems 和 mysql,它就可以工作了。有关我采取的确切步骤,请参阅我的问题:Installing Rails, MySQL, etc. everything goes wrong

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

                【讨论】:

                  【解决方案18】:

                  我仍然发现使用上述解决方案,它(例如)不适用于 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 从命令行运行,以及 TextMate 插件,如 ruby-on-rails-tmbundle

                  明确一点:这也修复了您在启动 rails 服务器时遇到的错误。

                  【讨论】:

                    【解决方案19】:

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

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

                    【讨论】:

                      【解决方案20】:

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

                      rvm use <yourrubie>
                      

                      然后进入我的项目路径

                      cd ~/myprojectpath
                      

                      然后我运行

                      bundle install
                      

                      【讨论】:

                        【解决方案21】:

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

                        【讨论】:

                          【解决方案22】:

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

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

                          它应该可以工作。

                          【讨论】:

                          • 这成功了,谢谢!!!我无法让 Django 在 Visual Studio Code 上运行。无论我是否在 virtualenv 上安装了 mysqlclient,都会出现错误。
                          【解决方案23】:

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

                          brew link mysql
                          

                          如果您在使用版本时遇到问题(我运行的是 mysql 5.7,而我的 gem 需要 5.6.25),您可以

                          brew unlink mysql
                          brew switch mysql 5.6.25
                          

                          【讨论】:

                            【解决方案24】:

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

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

                            【讨论】:

                              猜你喜欢
                              • 2016-08-06
                              • 2011-06-01
                              • 2012-05-20
                              • 1970-01-01
                              相关资源
                              最近更新 更多