2011-04-07 128 views
5

我想從Railscast運行一個簡單的Ruby腳本,一旦我運行我的程序,我得到以下Segmentation故障錯誤錯誤。我試圖卸載並重新安裝Nokogiri和LibXML,但仍然沒有。無論如何修復Ruby 1.87版本?也許這是問題?Nokogiri分割錯誤?

$ 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 
+0

如果您卸載nokogiri寶石並重新安裝,會發生什麼情況? – 2011-04-07 05:02:44

+0

我仍然收到相同的錯誤。我不知道爲什麼它說'[BUG]分割錯誤 紅寶石1.8.7(2009-06-12 patchlevel 174)[universal-darwin10.0]' – Kevin 2011-04-07 05:08:17

+0

請添加'rvm list'和'rvm信息「給你的問題。 – 2011-04-07 13:42:06

回答

16

你正迫使Apple安裝的Ruby運行,這是紅寶石1.8.7:

#!/usr/bin/ruby -w 

而不是你的一個由RVM管理的紅寶石。嘗試:

#!/usr/bin/env ruby -w 

這樣,如果你希望你的系統的Ruby運行的代碼,你可以告訴RVM切換到它:

rvm use system 

,它會響應:Now using system ruby.或者,您可以使用任何RVM管理紅寶石的運行代碼:

rvm 1.8.7 

,如果你已經安裝RVM的1.8.7的實例,或者

rvm 1.9.2 

rvm default 

如果你設置了默認的Ruby RVM的,這始終是一個好主意:

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 Power Wheels Batman Lil Quad Ride-On 
- $59.97 
/ip/Fisher-Price-Batman-Lil-Quad/10098697 

進行更改到#!線後,並修復到price行,我使用Ruby 1.8運行你的代碼。 7在我的系統中,隨着RVM控制1.8.7和1.9.2沒有問題。