Rails + MySQL on OSX: 库未加载: libmysqlclient

我刚刚开始使用 Ruby (和 ails)。我根据 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 中创建 RailsDB 时,我得到:

$ 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 如何定位它的最好方法是什么?

107661 次浏览

这个解决方案非常简单; 在 ~/. 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
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

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

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

对我有用,但所有类似的都没用。

用于从 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

在命令行中使用:

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

在少数几台电脑上试用,特立独行总是管用的

我确认从 Abhishek 是的的补丁工作。

约塞米蒂国家公园也是如此。

注: 不要链接到特定版本的 mysql,而是使用 mysql 已经构建的 symlink:

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

这个解决方案适用于 Xcode 和 CAPI。

如果你正在使用 Bitnami RubyStack 并且遇到了类似的问题,试试这个

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

为了确定需要什么样的 symlink (取决于 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

我在加载捆绑包文件时遇到的问题是错误的符号链接。因此,请检查链接,并在需要时用一个新的链接替换它。在那一刻,一切都井然有序。不知道怎么回事,但确实发生了。第一次出现这样的语法错误。

我正在使用 rails g model命令,我得到了这个错误:

Library not loaded: libmysqlclient.18.dylib

我已经试过这个了,它对我很有用,我用的是小牛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

他们俩对我来说都很好。 希望能派上用场!

我在酋长岩找到了 ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

在船长 /usr/lib/现在有一个受限制的标志,不能写到没有禁用安全,所以我只是把链接在 /usr/local/lib而不是。

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

Rails 服务器再次运行良好。

如果你正在使用从酋长馆的 HomeBrew 安装的 MySQL,那么你应该链接如下:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

在从 用于 python3的 MySQL导入 MySQLdb 时,我遇到了这样一个问题: “ Library not load: 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 Python 3.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

我使用 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)


在上面的这个线程中,我确定需要在终端中发出这个命令: < br/> sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib < br/> 这个命令产生了一个错误: “ 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 再次运行,运行脚本/控制台时没有错误。我希望这能帮到你。

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

在我的例子中(El Capitan,mysql 通过自制安装) ,brew update && brew upgrade导致 mysql 包升级到5.7.10(从5.6. x)。

升级使得 libmysqlclient.18.dyliblibmysqlclient.20.dylib所取代,但是 mysql2仍然依赖于前者。

为了解决这个问题,我做了: gem uninstall mysql2 && gem install mysql2

请注意,不同的自制管理库(比如说,看看我自己的答案)也会出现类似的问题

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

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

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

Reinstalling the mysql2 gem solved this problem.

$ 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]

唯一对我有用的就是:

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 和 gem 的路径以适应您的系统。

这对我有用:

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

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

$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 Darwin Kernel Version 15.6.0: Thu Jun 23 18:25:34 PDT 2016; XXX:xnu-3248.60.10~1/RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql:5.6.19

在 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
gem uninstall -aIx

还有

bundle install

对我有用。

对于那些谁是使用酿造。只要链接您的 mysql 版本与“——力量”选项。

brew link mysql56 --force

这招对我很管用。我所要做的就是卸载 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

我使用的是 Mac OS,即使卸载/删除了所有 mysql 和 MAMP,我还是被这个 bug 困住了。早些时候,我安装了 brew install mysql,也使用了 MAMP。 addling softlink didn't work for me.

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

谢谢。家酿升级使我的 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'

和在数据库。 yml

adapter: mysql2

这个问题已经有很多答案了,尤其是这个 https://stackoverflow.com/a/10847618/5515861。我只想加几个注释。如果你们在使用 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

希望你能解决你的问题

顺便说一句: $ gem pristine mysql2帮我解决了这个问题。