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で管理されているRubiesのいずれかを使用してコードを実行できます。

rvm 1.8.7

RVMに1.8.7のインスタンスをインストールさせた場合、または

rvm 1.9.2

また

rvm default

RVM用にデフォルトのRubyを設定する場合、これは常に良い考えです。

rvm use 1.9.2 --default

RubyRVMのどのバージョンが制御下にあるかを確認できます。

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

出力は次のようになります。

フィッシャープライスパワーホイールバットマンリルクワッドライドオン
 -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 に答える