我可能走得太远了。我安装了Homebrew,在它继续警告我安装了MacPorts后,我把它卸载了。但是现在我的rspec测试不能运行。
这些是我得到的错误:
/Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/nokogiri-1.4.4/lib/nokogiri.rb:13:in `require': dlopen(/Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.bundle, 9): Library not loaded: /opt/local/lib/libiconv.2.dylib (LoadError)
Referenced from: /Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.bundle
Reason: Incompatible library version: nokogiri.bundle requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0 - /Users/mark/.rvm/gems/ruby-1.9.2-p180/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.bundle
.....
.....
我已经通过Homebrew安装了libiconv,但这并没有解决它。它在抱怨libiconv的版本号。这就是问题所在吗?
这里发生了什么,我需要做什么?
我让事情再次工作感兴趣的人。我删除并重新安装了nokogiri gem,一切似乎又工作了。
一般来说,这个问题是由于无法找到正确的libiconv引起的。下面是我解决这个问题的方法:
检查otool -L /usr/lib/libiconv.2.dylib
输出。我得到了以下输出:
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
然后我用Homebrew, brew install libiconv
安装libiconv,并使用brew list libiconv
显示它的安装位置。我得到了以下输出:
/usr/local/Cellar/libiconv/1.14/bin/iconv
/usr/local/Cellar/libiconv/1.14/include/ (3 files)
/usr/local/Cellar/libiconv/1.14/lib/libcharset.1.dylib
/usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib
/usr/local/Cellar/libiconv/1.14/lib/ (3 other files)
/usr/local/Cellar/libiconv/1.14/share/doc/ (6 files)
/usr/local/Cellar/libiconv/1.14/share/man/ (6 files)
libiconv安装在/usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib
中。然后检查新安装的libiconv的版本,otool -L /usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib
,得到如下输出:
/usr/local/Cellar/libiconv/1.14/lib/libiconv.2.dylib:
/usr/local/opt/libiconv/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
版本是正确的,我们需要使这个库在Ruby中可用。创建一个符号链接是一个快速的解决方案:
sudo ln -s /usr/local/opt/libiconv/lib/libiconv.2.dylib /opt/local/lib/libiconv.2.dylib
除了nokogiri之外,我还必须重新安装libxml-ruby才能使其再次工作。
我遇到了同样的问题,如果你正在销售你的gem,你将不得不从vendor/ruby中删除有问题的gem,因为gem卸载+重新安装并不总是有效的。我猜,即使在运行新安装时,捆绑器也会留下gem及其相应库的缓存残留物。