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

时间:2012-05-11 19:33:47

标签: mysql ruby-on-rails ruby macos

我刚刚开始使用Ruby(和rails)。我使用rvm根据http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby宝石进行了设置。我用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如何定位它的最佳方法是什么?

27 个答案:

答案 0 :(得分:300)

解决方案非常简单;在〜/ .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

答案 1 :(得分:121)

在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服务器再次正常运行。

答案 2 :(得分:48)

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

在我的情况下(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

请注意,不同的自制程序管理库(see my own answer to this, for example

可能会出现类似问题

答案 3 :(得分:25)

sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

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

答案 4 :(得分:16)

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

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

答案 5 :(得分: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

答案 6 :(得分:9)

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

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

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

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

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

答案 7 :(得分:6)

对于在Mavericks上从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

答案 8 :(得分:4)

我确认来自Abhishek的补丁 工作。

它也适用于约塞米蒂。

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

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

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

答案 9 :(得分:3)

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

brew link mysql56 --force

答案 10 :(得分:2)

确定需要什么符号链接(取决于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

答案 11 :(得分:2)

这对我有用:

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

答案 12 :(得分: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:不允许操作“。我以前从未见过那个错误。

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

答案 13 :(得分: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

答案 14 :(得分:1)

gem uninstall -aIx

bundle install

为我工作。

答案 15 :(得分: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

答案 16 :(得分:0)

唯一对我有用的是:

unset($myArray[0]);
$myArray = array_values($myArray);

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

答案 17 :(得分:0)

interpolate导入MySQLdb时出现此问题“Library not loaded: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

答案 18 :(得分: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 Darwin内核版本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

答案 19 :(得分: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

他们两个都适合我。 希望它可能有用!

答案 20 :(得分:0)

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

答案 21 :(得分:0)

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

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

答案 22 :(得分: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

尝试使用特立独行的少数计算机

答案 23 :(得分:0)

我使用的是Mac OS,即使卸载/删除了所有的mysql和MAMP,我仍然被这个错误困扰。之前,我安装了brew install mysql,还使用了MAMP。 addling软链接对我不起作用。

只能通过删除所有现有的mysql来解决。然后install mysql through MySQL from here

答案 24 :(得分: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

答案 25 :(得分:0)

这个问题已经有了很多答案,尤其是这个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

希望您能解决问题?

答案 26 :(得分:0)

仅作记录:pg>=8.0.3为我解决了这个问题。