我刚刚开始使用Ruby (和rails)。我使用rvm
根据http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gem进行了设置。我用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创建DB时,我得到了:
$ 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如何定位它的最好方法是什么?
发布于 2012-06-01 17:19:53
解决方案非常简单;在~/.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:
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
发布于 2015-10-01 05:01:00
在埃尔卡皮坦我得到了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服务器又可以正常运行了。
发布于 2016-01-12 14:39:46
虽然这个问题的标题准确地描述了我遇到的问题,但情况与前面答案中描述的情况不同,解决方案也不同。
在我的例子中(El Capitan,通过自制软件安装的mysql ),brew update && brew upgrade
导致mysql包升级到5.7.10 (从5.6.x)。
这次升级导致libmysqlclient.18.dylib
被libmysqlclient.20.dylib
取代,但mysql2
gem仍然依赖于前者。
为了解决这个问题,我做到了:gem uninstall mysql2 && gem install mysql2
请注意,不同的自制托管库(see my own answer to this, for example)可能会出现类似的问题
https://stackoverflow.com/questions/10557507
复制相似问题