Ruby で mechanize を使おうとするのですが、下記のようなエラーがでます。

症状としては、http://agora.scrubyt.org/forums/3/topics/186
に近いです。

解決策がすぐにピンときた人に回答お願いします。


/usr/lib/site_ruby/1.8/mechanize/inspect.rb:44: undefined method `pretty_inspect' for class `WWW::Mechanize::Page' (NameError)
from /usr/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from /usr/lib/site_ruby/1.8/mechanize.rb:42
from /usr/lib/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from t.rb:2

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/09/26 15:00:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:iwadon No.1

回答回数60ベストアンサー獲得回数13

ポイント27pt

mechanizeをrequireしている行の前後に

require 'pp'

を追加してはいかがでしょうか。

Object#pretty_inspectは上記 pp ライブラリが追加するメソッドのはずです。

instance method Object#pretty_inspect

id:isogaya

ありがとうございます。でも、だめです。

下記のようにいれてみました。

require 'pp'

require 'rubygems'

require 'mechanize'

2007/09/19 17:27:36
id:moro No.3

回答回数23ベストアンサー獲得回数10

ポイント26pt

http://blog.tomonrails.com/blog/show/9

似た例としてあげられているページですが、そちらで触れているscrubytは内部でmechanizeを使ってますので、症状としてはまったく同じと考えていいかと思います。

ということで対処としては

Then you'll need to open inspect.rb and comment out lines 43-45 and 55-57.

mechanize-0.6.10/lib/mechanize/inspect.rb の43-45行目と55-57行目をコメントアウトしてはいかがでしょうか。

名前から推察するに、inspectで多量の情報(HTMLをまるっと取り込んだ上、パース結果を保持したりする)が表示されてしまうのを整理/整形するためのメソッドだと思われますので、動作はしてもデバッグがやや大変になるかとは思います。ただ、動作には影響ないと思いますので試してみる価値はあるんじゃないでしょうか。

(たぶん)遠からずバグ修正されるでしょうから、そちらもチェックしてみるのもいいかと思います。

  • id:iwadon
    すみません、的外れな回答をしてしまいました。一応コメントでフォローします。

    根本的な対処方法ではありませんが、ひとまずエラーを回避するのであれば、エラーが発生する行を無効にしてください。質問にありましたリンク先でも同様に回避しているようでした。

    具体的には、mechanize 0.6.10 であると仮定して、mechanize/inspect.rb の 44 行目と 56 行目に alias から始まる行があると思いますので、その二つの行をコメントアウトしてください。

    あと、手元の環境で再現しようとしたのですができませんでした。
    ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-freebsd6]
    rubygems 0.9.2
    hpricot 0.6
    mechanize 0.6.10
  • id:isogaya
    ありがとうございます。Ruby のバージョンが原因のようです。1.8.4 がはいっていました。とりあえず、コメントアウトでしのぎました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません