OSX上的rails + MySQL:未加载库:libmysqlclient.18.dylib

Geo*_*old 113 ruby mysql macos ruby-on-rails

我刚刚开始使用Ruby(和rails).我按照http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems 进行了设置rvm.我用sqlite做得很好.

现在我想尝试将事情转换为MySQL,因为这是我开发的大部分内容.在我的Gemfile中,我用mysql2替换了sqlite:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在MySQL中为rails创建数据库时,我得到:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
Run Code Online (Sandbox Code Playgroud)

我已经看到其他帖子建议通过自制软件重新安装MySQL(我的是通过可下载的DMG安装的),但我不想这样做,因为我已经有其他几个非ruby项目的数据库了.

事实上我确实有Rails正在寻找的文件; 它安装在/usr/local/mysql/lib/libmysqlclient.18.dylib.告诉Rails如何找到它的最佳方法是什么?

小智 307

解决方案非常简单; 在〜/ .bash_profile或〜/ .profile文件中添加库路径:

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

如果它仍然不起作用(这项工作对我来说):

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

有许多博客install_name_tool,这对我不起作用,因为我在OSX Lion上:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search
Run Code Online (Sandbox Code Playgroud)

  • 对于那些来到10.11的人来说,你不能再符号链接到`usr/lib`,但是`usr/local/lib`的符号链接将起作用:`sudo ln -s /usr/local/mysql/lib/libmysqlclient.18 .dylib/usr/local/lib/libmysqlclient.18.dylib` (73认同)
  • 符号链接适用于我(升级到Mountain Lion后).谢谢! (16认同)
  • Symlink可以做到这一点,特别是对于像在RubyMine下运行rails的情况,`.bash_profile`并不真正适用. (5认同)
  • 我将您的DYLD_LIBRARY_PATH添加到.bash_profile,但我还必须卸载'mysql2'gem然后重新安装它.喜欢:'gem uninstall mysql2 && gem install mysql2' (2认同)
  • @JonathanSimmons - 你刚刚把我从拔掉我剩下的头发中解救出来.最初的符号链接答案在OS X 10.11.5上不起作用,你最终会得到错误"ln:/usr/lib/libmysqlclient.18.dylib:Operation not allowed" - 现在一切正常,我终于可以启动了今天工作......谢谢! (2认同)

Tin*_*key 123

在El Capitan,我得到了 ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

在El Capitan /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)

Rails服务器再次正常运行.

  • 不需要亚历克斯的所有答案.一个符号链接就是这个伎俩. (2认同)

Giu*_*ppe 52

虽然这个问题的标题恰好描述了我遇到的问题,但情况与前面的答案中描述的情况不同,解决方案也是如此.

在我的情况下(El Capitan,通过自制软件安装mysql),brew update && brew upgrade导致mysql包升级到5.7.10(从5.6.x开始).

升级导致libmysqlclient.18.dylib被替换libmysqlclient.20.dylib,但mysql2宝石仍然依赖于前者.

为了解决我做的问题: gem uninstall mysql2 && gem install mysql2

请注意,不同的自制程序管理库可能会出现类似的问题(例如,请参阅我自己的答案)

  • **我建议所有人先尝试这个!**如果它有效,你可以避免使用任何其他解决方法来阻止你的系统.有时你必须依赖神奇的符号链接等,但这会让你的系统变得越来越脆弱.(如果它不起作用,则不会造成任何伤害,也无需撤消.) (9认同)

Jos*_*eph 26

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

这对我有用.我从dmg文件安装了MySQL.

  • 不允许操作(显然是sudo)我的SO版本是El capitan (3认同)

小智 16

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

为我工作.所有类似的都没有.


sea*_*cal 11

在完全删除然后重新安装MySQL之后我遇到了这个问题.特别:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib
Run Code Online (Sandbox Code Playgroud)

我甚至没有碰过我的Rails应用程序.

重新安装mysql2gem解决了这个问题.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)
Run Code Online (Sandbox Code Playgroud)

[MySQL 5.7.10,Rails 4.0.0,Ruby 2.0.0,Mac OS X Yosemite 10.10]


小智 9

如果您使用的是从El Capitan的HomeBrew安装的MySQL,那么您应该按如下方式链接它:

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


Jos*_*eim 8

只是为了记录:$ gem pristine mysql2为我解决了这个问题。


Abh*_*nde 6

对于从小牛队的DMG安装的MySql 5.6

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