Nokogiri分段故障?

我试图从Railscast运行一个简单的Ruby脚本,一旦我运行我的程序,我得到以下Segmentation fault bug错误。 我已经尝试卸载并重新安装Nokogiri和LibXML,但仍然没有。 无论如何修复Ruby 1.87版本? 也许这就是问题?

$ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0] /Users/da/.rvm/gems/ruby-1.9.2-p180/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 $ ruby -v ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.7.0] $ bundle exec nokogiri -v— --- warnings: [] nokogiri: 1.4.4 ruby: version: 1.9.2 platform: x86_64-darwin10.7.0 engine: ruby libxml: binding: extension compiled: 2.7.7 loaded: 2.7.7 

这是我使用的代码:

 #!/usr/bin/ruby -w require 'rubygems' require 'nokogiri' require 'open-uri' url = "http://www.walmart.com/search/search-ng.do?search_constraint=0&ic=48_0&search_query=batman&Find.x=0&Find.y=0&Find=Find" doc = Nokogiri::HTML(open(url)) puts doc.at_css("title").text doc.css(".item").each do |item| title = item.at_css(".prodLink").text price = item.at_css(".PriceCompare .BodyS, .PriceXLBold").text[/\$[0-9\.]+/] puts "#{title} - #{price}" puts item.at_css(".prodLink")[:href] end 

您正在强制运行Apple安装的Ruby,这是Ruby 1.8.7:

 #!/usr/bin/ruby -w 

而不是由RVM管理的一个Rubies。 尝试:

 #!/usr/bin/env ruby -w 

这样,如果您希望系统Ruby运行代码,您可以告诉RVM切换到它:

 rvm use system 

它会响应: Now using system ruby. 或者,您可以使用任何RVM托管的Rubies来运行代码:

 rvm 1.8.7 

如果您有RVM安装1.8.7的实例,或

 rvm 1.9.2 

要么

 rvm default 

如果你为RVM设置一个默认的Ruby,这总是一个好主意:

 rvm use 1.9.2 --default 

您可以查看其控制的Ruby RVM的哪些版本:

 $ rvm list rvm rubies ruby-1.8.7-p334 [ x86_64 ] => ruby-1.9.2-p180 [ x86_64 ] 

现在,转到您的实际代码,你有一个错误。 在尝试检索项目的价格时,您正在寻找错误的CSS,而不是找到价格节点,获取nil值,然后尝试从中获取text 。 改为使用它:

 price = item.at_css(".camelPrice").text[/\$[0-9\.]+/] 

您的输出看起来类似于:

 Fisher-Price动力车蝙蝠侠Lil Quad Ride-On
  -  59.97美元
 / IP /费雪 - 蝙蝠侠律-QUAD / 10098697

改为#! 在我的系统中使用Ruby 1.8.7运行你的代码,以及RVM控制的1.8.7和1.9.2没有任何问题。

可能是这篇文章中描述的解决方案对你有用 : 升级到ruby 1.9.2并在nokogiri中获得Segmentation Fault错误