2011-04-07 17 views
5

मैं Railscast से एक साधारण रूबी स्क्रिप्ट चलाने की कोशिश कर रहा हूं और एक बार जब मैं अपना प्रोग्राम चलाता हूं तो मुझे निम्न सेगमेंटेशन गलती बग त्रुटि मिलती है। मैंने नोकोगिरी और लिबएक्सएमएल को अनइंस्टॉल करने और पुनर्स्थापित करने का प्रयास किया है और अभी भी कुछ भी नहीं है। रूबी 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 
+0

क्या होता है यदि आप नोकोगिरी मणि को अनइंस्टॉल करते हैं और इसे पुनः इंस्टॉल करते हैं? –

+0

मुझे अभी भी एक ही त्रुटि मिल रही है। मुझे नहीं पता कि यह क्यों कह रहा है '[BUG] सेगमेंटेशन गलती रूबी 1.8.7 (200 9 -12-12 पैचलेवल 174) [सार्वभौमिक-डार्विन 10.0] ' – Kevin

+0

कृपया' आरवीएम सूची 'और' आरवीएम 'का आउटपुट जोड़ें जानकारी 'आपके प्रश्न के लिए। –

उत्तर

16

आप को चलाने के लिए एप्पल से स्थापित रूबी के लिए मजबूर कर रहे हैं,

#!/usr/bin/ruby -w 
बजाय RVM द्वारा प्रबंधित अपने माणिक से एक

: जो रूबी 1.8.7 है । प्रयास करें:

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

अब, अपने वास्तविक कोड पर जाकर, आपके पास एक बग है। किसी आइटम के लिए मूल्य पुनर्प्राप्त करने का प्रयास करते समय आप गलत सीएसएस की तलाश में हैं, कीमत नोड नहीं ढूंढ रहे हैं, 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 मेरे सिस्टम में, आरवीएम के साथ 1.8.7 और 1.9.2 नियंत्रित कोई समस्या नहीं है।

संबंधित मुद्दे