在OSX上使用Rails+MySQL时出现的问题:库未加载:libmysqlclient.18.dylib

125

我刚开始学习 Ruby(和 Rails)。我按照链接 http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby 中的指示设置了 rvm 宝石,并且已经成功地使用 sqlite 进行了一切工作。

现在我想尝试将事情转换到 MySQL 上,因为这是我大部分开发所使用的。在我的 Gemfile 文件中,我已经用 mysql2 替换了 sqlite:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

但是,当我尝试在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

我看到其他帖子推荐通过 homebrew 重新安装 MySQL(我的是通过可下载的 DMG 安装的),但我不想这样做,因为我已经有其他数据库用于其他非 Ruby 项目。

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


这可能是一个重复的问题吗?https://dev59.com/j2855IYBdhLWcg3wFAHy - oldhomemovie
确实。我不能删除自己的问题吗?投票关闭为重复。 - George Armhold
28个回答

3

为确保所需的符号链接(取决于mysql版本和操作系统版本):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

因此:

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

2
这对我有用:
注:此处为代码段,无需翻译。
ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

最终对我来说只是一个变化... ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib - treejanitor

2
对于使用brew的用户,只需使用“--force”选项将您的mysql版本链接即可。
brew link mysql56 --force

这是链接库文件的方法...而不是使用ln -s选项。使用brew link mysql@5.7 --force来更新版本。 - Vahid Kowsari
1
谢谢。我执行了 brew link mysql@5.7 --force 命令。完美运行。 - user2473975

1

我正在使用Rails REE (2.3.4)来维护一个遗留系统。在升级到El Capitan后,运行script/console时出现错误,我的应用程序将不再启动(使用pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


从这个帖子中,我确定我需要在终端中发出以下命令:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
这个命令产生了一个错误:“ln:/usr/lib/libmysqlclient.18.dylib:操作不允许”。我以前从未见过这个错误。

经过一番搜索,我找到了这篇文章:http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html 并按照说明关闭了SIP(El Capitan的新系统完整性保护)。关闭SIP后,重新启动后,ln命令正常工作。然后我关闭了SIP。现在一切都好了。我的应用程序再次使用pow运行,并且运行脚本/控制台时没有任何错误。希望这可以帮助你。


1
gem uninstall -aIx

并且

bundle install

对我起作用了。


1

这个问题已经有很多答案了,特别是这个 https://dev59.com/hGkv5IYBdhLWcg3wfA4P#10847618。我只想补充几点。如果你们使用的是Mac,我不知道你们如何安装MySQL,但第一件事是要调查你的MySQL安装位置。对于我来说,MySQL是使用brew安装的,版本为5.7,位置是/usr/local/opt/mysql@5.7/,所以将以下内容添加到我的~/.zshrc

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

希望你解决了你的问题。

1
我正在使用Mac OS,即使卸载/删除所有的mysql和MAMP,我仍然被这个错误困扰。之前,我安装了brew install mysql并使用了MAMP。添加软链接对我来说没有用。只有通过删除所有现有的mysql,然后从这里安装mysql,才得以解决。

1
这对我有用。我所做的就是卸载mysql2 gem,然后使用以下命令重新安装它。
gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config

1
在Mac Sierra上,如果使用Homebrew,则执行以下操作:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

0

对我有效的唯一方法是:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

将mysql和gems的路径替换为适合您的系统的路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接