Получение Rails для игры с Hpricot - PullRequest
0 голосов
/ 12 июля 2009

Я пытаюсь заставить Hpricot работать с Rails на моем компьютере разработчика.

Я установил Hpricot [0.8.1] с использованием стандартного 'gem install hpricot' и подтвердил, что он работает нормально с моей стандартной установкой Ruby [1.8.7]; однако, когда я пытаюсь сделать то же самое с моей установкой Rails [2.1.0], я получаю сообщение об ошибке -

TypeError: несоответствие суперкласса для класса BogusETag из /usr/lib/ruby/1.8/hpricot/tag.rb:130

Похоже, что есть какой-то конфликт, но поиск ошибки не дал никакой полезной информации.

Есть идеи? Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 25 июля 2009

Если вы можете свободно выбирать свою библиотеку для разбора HTML, переключите ее. Почему, создатель Hpricot, недавно написал, что вам лучше использовать Nokogiri вместо HPricot, в настоящее время.

1 голос
/ 04 ноября 2009

Эта ошибка возникает из-за отсутствия скомпилированной библиотеки для платформы. Чтобы решить эту проблему для вашей текущей версии hpricot, перейдите в директорию вашего каталога rails и выполните следующее (предполагается, что вы используете распакованный гем - эта проблема не возникнет иначе, если ваша ОС не была обновлена ​​с момента установки гема):

cd vendor/gems/hpricot-0.6/ext/hpricot_scan/
ruby extconf.rb
make

Затем скопируйте скомпилированную библиотеку в каталог, соответствующий вашей системе. Каждая версия OS X имеет немного другое название платформы, поэтому моя (Snow Leopard) выглядит так:

ruby-1.8.6-p383 > RUBY_PLATFORM
 => "i686-darwin10.0.0"

Это означает, что мне нужно было скопировать файл "hpricot_scan.bundle" (OS X использует комплекты для общих библиотек в Linux, который будет "hpricot_scan.so") в следующий каталог, создав его при необходимости:

vendor/gems/hpricot-0.6/lib/i686-darwin10.0.0/

Замените подходящее имя платформы (переводит RUBY_PLATFORM от irb) для вашей машины.

0 голосов
/ 22 сентября 2010

Выполнить команду ниже и ее работы

gem install hpricot --platform = mswin32

0 голосов
/ 13 июля 2009

Попробуйте использовать Hpricot в сеансе irb, потому что я не думаю, что это вообще должно происходить



irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'hpricot'
=> true
irb(main):003:0> doc=Hpricot.parse("<html><head><title>test</title></head><body> Wooo Hooo </body></html>")
=> # {elem  {elem  "test" } } {elem  " Wooo Hooo " } }>
irb(main):004:0> doc.search('title')
=> # "test" }]>
irb(main):005:0> doc.search('title').text
=> "test"

Это означает, что ваш Hpricot работает нормально. И проблема в том, как вы используете его в Rails. (Было бы проще, если бы вы могли вставить свой код).

У меня было несколько проблем с Hpricot (0.8.1) ранее, пришлось переключиться обратно на версию 0.6.164. Вы можете попробовать это, если хотите.

НТН

...