122

我刚开始使用 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

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

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

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

4

27 回答 27

317

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

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

如果它仍然不起作用(这对我有用):

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

有很多博客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
于 2012-06-01T09:19:52.903 回答
126

在 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

Rails 服务器再次运行良好。

于 2015-09-30T21:00:59.803 回答
68

虽然这个问题的标题准确地描述了我遇到的问题,但情况与之前的答案中描述的情况不同,解决方案也是如此。

就我而言(El Capitan,通过自制软件安装brew update && brew upgrade的 mysql),a 导致 mysql 包升级到 5.7.10(从 5.6.x)。

升级导致libmysqlclient.18.dylib替换为libmysqlclient.20.dylib,但mysql2gem 仍然依赖于前者。

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

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

于 2016-01-12T06:39:45.963 回答
26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

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

于 2012-10-17T07:00:16.653 回答
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

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

于 2013-07-03T13:02:11.373 回答
14

在完全删除然后全新安装 MySQL 后,我遇到了这个问题。具体来说:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

我什至没有碰过我的 Rails 应用程序。

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

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

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

于 2016-02-24T20:52:24.043 回答
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
于 2015-10-10T09:50:53.487 回答
6

对于从 DMG 在 Mavericks 上安装的 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
于 2013-11-13T20:13:58.267 回答
4

我确认来自 Abhishek 的补丁确实有效。

它也适用于优胜美地。

注意:不要链接到特定版本的 mysql,而是使用 mysql 已经构建的符号链接这一事实:

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

此解决方案适用于 Xcode 和 C API。

于 2014-07-09T15:22:49.520 回答
3

确定需要什么符号链接(取决于 mysql 版本和 os 版本):

$ 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
于 2015-05-31T13:44:51.077 回答
2

对于那些正在使用 brew 的人。只需使用“--force”选项链接你的mysql版本。

brew link mysql56 --force
于 2017-10-14T15:27:30.040 回答
2

这对我有用:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
于 2016-05-12T20:53:55.137 回答
2

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

于 2020-12-04T06:47:59.720 回答
1

我正在将 Rails REE (2.3.4) 用于我们拥有的旧系统。升级到 El Capitan 后,运行脚本/控制台产生错误,我的应用程序将不再启动(使用 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: Operation not allowed”。我以前从未见过这个错误。

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

于 2015-12-09T15:03:50.983 回答
1

我正在使用 Mac OS,即使在卸载/删除所有 mysql 和 MAMP 之后,我也遇到了这个错误。早些时候,我安装brew install mysql并使用了MAMP. 添加软链接对我不起作用。

只能通过删除所有现有的mysql来解决。然后从这里通过 MySQL 安装 mysql

于 2019-12-22T02:36:50.147 回答
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
于 2017-02-27T11:17:22.233 回答
1
gem uninstall -aIx

bundle install

为我工作。

于 2017-04-29T21:29:31.353 回答
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
于 2019-10-31T10:00:39.197 回答
1

这个问题已经有很多答案了,尤其是这个https://stackoverflow.com/a/10847618/5515861。我只想添加几个注释。如果你们使用 Mac,我不知道你是如何安装 MySQL 的,但首先要调查的是你的 MySQL 安装在哪里。对我来说,MySQL 是使用brewfor version安装的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

希望你解决你的问题

于 2020-06-10T02:59:39.253 回答
0

从你的命令行使用它:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

在一些特立独行的电脑上试过总是有效

于 2014-01-18T09:16:43.167 回答
0

如果您使用 Bitnami RubyStack 并遇到类似的问题。试试这个

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
于 2014-08-07T09:35:56.157 回答
0

当从MySQL For python3导入 MySQLdb 时,我遇到了这个问题“库未加载:libmysqlclient.18.dylib” :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

解决方案对我有用:Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
于 2015-12-01T16:56:17.933 回答
0

我正在使用rails g model命令,但出现此错误:

Library not loaded: libmysqlclient.18.dylib

我已经尝试过了,它对我有用。我使用的是 Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

谢谢!

现在我使用的是 Yosemite 10.10.5 并且遇到了同样的错误,所以我只是在终端上运行了这个命令,它已成功修复。

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

你也可以试试:

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

他们两个对我来说都很好。希望它可能有用!

于 2015-08-30T20:24:31.533 回答
0

经过大量的谷歌搜索和以上所有尝试......唯一解决我的问题的是这个命令:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

我正在使用 macbook pro,OSX 10 El Capitan。Darwin xxxx-MacBook-Pro.local 15.6.0 达尔文内核版本 15.6.0:2016 年 6 月 23 日星期四 18:25:34 PDT;XXX:xnu-3248.60.10~1/RELEASE_X86_64 x86_64 Perl:v5.18.2 Mysql:5.6.19

于 2016-08-28T15:04:13.240 回答
0

我加载该捆绑文件的问题是错误的符号链接。因此,请检查链接,并在需要时将其替换为新链接。一切都在那个时候到位。不知道那是怎么发生的,但确实发生了。第一次发生这样的语法错误。

于 2015-08-18T16:10:06.270 回答
0

谢谢。Homebrew 升级使我的 Rails 应用程序在我的 Mac 上出现问题。我从源代码重新安装了 MySQL (5.7),然后我不得不这样做

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

根据我上面读到的,在我的 Gemfile

gem 'mysql2', '0.5.3'

并在 database.yml

adapter: mysql2
于 2019-12-30T16:16:31.263 回答
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 的路径以适合您的系统。

于 2016-02-27T17:10:13.957 回答