2011-04-07 1 views
5

Railscast에서 간단한 Ruby 스크립트를 실행하려고하고 프로그램을 실행하면 다음 세그멘테이션 오류 버그 오류가 발생합니다. 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 gem을 제거하고 다시 설치하면 어떻게됩니까? –

+0

나는 여전히 같은 오류가 발생하고 있습니다. 왜 [BUG] Segmentation fault 루비 1.8.7 (2009-06-12 패치 레벨 174) [universal-darwin10.0]' – Kevin

+0

'rvm list'와'rvm list'의 출력을 추가하십시오. 귀하의 질문에 정보. –

답변

16

당신은 실행 애플 설치된 루비를 강요, Ruby 1.8.7 :

#!/usr/bin/ruby -w 

RVM에서 관리하는 루비 중 하나 대신 . 시도 :

#!/usr/bin/env ruby -w 

그 방법을, 당신은 코드를 실행하는 시스템 루비를 원한다면, 당신이 그것을로 전환 RVM을 알 수 있습니다 :

rvm use system 

을하고 응답합니다 : Now using system ruby. 또는, 당신이 할 수있는 1.8.7의 인스턴스를 설치

rvm 1.8.7 

당신이 RVM을 한 경우, 또는

: 코드를 실행하기 위해 RVM 관리 루비 중 하나를 사용하여
rvm 1.9.2 

또는

rvm default 

당신은 항상 좋은 생각이다 RVM에 대한 기본 루비, 설정 한 경우 :

rvm use 1.9.2 --default 

당신은 아래에있다 루비 RVM의 어떤 버전을 확인할 수 있습니다 그것 제어 :

$ rvm list 

rvm rubies 

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

이제 실제 코드로 이동하면 버그가 있습니다. 잘못된 CSS를 찾고있는 품목의 가격을 검색하려고 할 때 nil 값을 얻고 가격 노드를 찾지 못한 다음 text을 얻으려고합니다. 대신 사용 : #! 라인으로 변경 한 후

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

하고 price 라인에 수정, 루비 1.8를 사용하여 코드를 실행 :

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

귀하의 출력은 유사합니다. 7에서 RVM이 문제없이 1.8.7 및 1.9.2를 제어했습니다.