我正在尝试从 Railscast 运行一个简单的 Ruby 脚本,一旦运行我的程序,我就会收到以下 Segmentation failure 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 管理的红宝石之一。尝试:
#!/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
or
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 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 运行了您的代码,没有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)