我决定昨天升级到1.9.2 ruby并安装了rvm来做到这一点。我运行了一些我之前在1.8.7上工作的文件,但是任何需要nokogiri的文件都会因以下错误而失败。
/Users/myusername/.rvm/gems/ruby-1.9.2-p0/gems/nokogiri-1.4.3.1/lib/nokogiri/nokogiri.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
我在OSX Snow Leopard 10.6.4上运行nokogiri 1.4.3.1,ruby 1.9.2
答案 0 :(得分:5)
如果你从nokogiri那里得到一个Segmentation fault错误,例如,当你打开rails控制台时,你正在使用RVM而你的ruby版本是1.9.2(我的目前是1.9.2p136)并且你注意到在nokogiri分段错误消息之后的红宝石1.8.7,那么也许以下可能是有帮助的......
ERROR
$ rails c
/Users/lex/.rvm/gems/ruby-1.9.2-p136@lmi/gems/nokogiri-1.4.4/lib/nokogiri/nokogiri.bundle: [BUG] Segmentation fault
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
Abort trap
解
(1)确保ruby 1.8.7不是rvm ruby版本:
- 运行rvm list
如果是,则删除它:ex:
rvm uninstall ree-1.8.7-2010.02
(2)卸载nokogiri和libxml2相关的依赖项:
$ gem uninstall nokogiri
$ brew uninstall libxml2
(3)使用自制软件安装libxml2
$ brew install libxml2
$ brew link libxml2
(4)从源代码
安装libxslt$ wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
$ tar -zxvf libxslt-1.1.26.tar.gz
$ cd libxslt-1.1.26
$ ./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.7
$ make
$ sudo make install
(5)安装nokogiri
gem install nokogiri
替代方案(确保您的路径正确):gem install nokogiri -- --with-xml2-include=/usr/local/Cellar/libxml2/2.7.7/include --with-xml2-lib=/usr/local/Cellar/libxml2/2.7.7/lib --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26
(6)测试
$ rails c
Loading development environment (Rails 3.0.3)
>>
获取并保持Ruby XML解析库正常运行可能是一个问题。以下是一些替代方案:LibXML,Hpricot,REXML
答案 1 :(得分:4)
我猜你只需告诉rvm
使用正确的红宝石。
rvm 1.9.2
否则为什么你的第二行表示1.8.7?
你不应该期望针对一个主要版本的ruby编译的本机代码可以干净地链接到另一个版本。没有ABI合同,afaik。
答案 2 :(得分:2)
你有可能最初在Leopard上建造Nokogiri然后升级到Snow Leopard吗?
如果是,请执行gem uninstall nokogiri
后跟gem install nokogiri
。这将迫使它重新编译您当前选择的Ruby和OS。
当我从Leopard升级到Snow Leopard并重新安装我的Ruby时,我看到了类似的问题。宝石没有被重新编译,所以我不得不强迫其中几个这样做。
答案 3 :(得分:0)
尝试在终端中运行rvm requirements
,看看是否有任何遗漏的依赖项。 (它在我的OS X中以红色显示)
返回的笔记帮助我使用brew安装了缺少的依赖项,并明确说明了步骤。
答案 4 :(得分:0)