2011-04-07 29 views
5

Estoy tratando de ejecutar un simple script de Ruby desde Railscast y una vez que ejecuto mi programa recibo el siguiente error de error de segmentación. He intentado desinstalar y reinstalar Nokogiri y LibXML y aún nada. ¿Hay alguna forma de arreglar la versión Ruby 1.87? ¿Tal vez ese sea el problema?Nokogiri ¿Error de segmentación?

$ 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 

Este es el código que utilicé:

#!/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

¿Qué ocurre si desinstala la gema nokogiri y la vuelve a instalar? –

+0

Todavía recibo el mismo error. No sé por qué dice '[BUG] Error de segmentación ruby ​​1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]' – Kevin

+0

Agregue el resultado de 'rvm list' y' rvm información' a tu pregunta. –

Respuesta

16

Usted está forzando el Rubí instalado por Apple para funcionar, que es Ruby 1.8.7:

#!/usr/bin/ruby -w 

en lugar de uno de tus Rubies dirigido por RVM . Proveedores:

#!/usr/bin/env ruby -w 

esta manera, si usted quiere que su sistema de Rubí para ejecutar el código, se puede decir RVM a cambiar a ella:

rvm use system 

y responderá con: Now using system ruby. alternativa, puede utilizar cualquiera de los rubíes RVM logrado ejecutar el código:

rvm 1.8.7 

si hubiera RVM instalar una instancia de 1.8.7, o

rvm 1.9.2 

o

rvm default 

si se configura un rubí por defecto para RVM, que siempre es una buena idea:

rvm use 1.9.2 --default 

usted puede comprobar para ver qué versiones de Rubí RVM tiene bajo su control:

$ rvm list 

rvm rubies 

    ruby-1.8.7-p334 [ x86_64 ] 
=> ruby-1.9.2-p180 [ x86_64 ] 

Ahora, pasando a su código actual, tiene un error. Al intentar recuperar el precio de un artículo, está buscando el CSS incorrecto, no encuentra el nodo de precio, obtiene un valor de nil y luego intenta obtener el text. Use este lugar:

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

Su salida será similar a:

 
Fisher-Price Power Wheels Batman Lil Quad Ride-On 
- $59.97 
/ip/Fisher-Price-Batman-Lil-Quad/10098697 

Después de hacer el cambio a la línea #!, y el arreglo de la línea price, me encontré con el código utilizando Rubí 1.8. 7 en mi sistema, junto con RVM controlado 1.8.7 y 1.9.2 sin problemas.

Cuestiones relacionadas