5

我正在尝试从 Railscast 运行一个简单的 Ruby 脚本,一旦我运行我的程序,我就会收到以下分段错误错误错误。我已经尝试卸载并重新安装 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
4

2 回答 2

16

您正在强制运行 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 管理的 Ruby 来运行代码:

rvm 1.8.7

如果您有 RVM 安装 1.8.7 的实例,或者

rvm 1.9.2

或者

rvm default

如果您为 RVM 设置默认 Ruby,这始终是一个好主意:

rvm use 1.9.2 --default

您可以查看 Ruby RVM 控制的 Ruby 版本:

$ 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\.]+/]

您的输出将类似于:

费雪 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 没有任何问题。

于 2011-04-07T13:41:00.553 回答
1

这篇文章中描述的解决方案可能对您有用:升级到 ruby​​ 1.9.2 并在 nokogiri 中获取分段错误错误

于 2011-04-07T06:55:55.570 回答