2009-07-12 5 views
0

Ich versuche Hpricot mit Rails auf meinem Dev-Rechner zu arbeiten.Rails zum Spielen mit Hpricot bekommen

Ich habe Hpricot [0.8.1] mit dem Standard 'gem install hpricot' installiert und bestätigt, dass es mit meiner Standard-Ruby-Installation funktioniert [1.8.7]; aber wenn ich das gleiche mit meinem Rails versuchen [2.1.0] Installation, bekomme ich einen Fehler -

Typeerror: Super Mismatch für Klasse BogusETag von /usr/lib/ruby/1.8/hpricot/tag.rb:130

Scheint so, als gäbe es einen Konflikt, aber das googlen des Fehlers hat keine nützlichen Informationen ergeben.

Irgendwelche Ideen? Danke im Voraus.

+1

dies in einem völlig Vanille-App mit nur vorformulierten +, die Linie erfordern passiert das? – Chuck

Antwort

1

Wenn Sie frei sind, Ihre HTML-Parsing-Bibliothek zu wählen, es wechseln. Warum, der Schöpfer von Hpricot, schrieb kürzlich, dass Sie besser Nokogiri anstelle von HPricot heutzutage verwenden sollten.

+0

Können Sie einen Link unter Angabe seiner Erklärung posten? Sie haben in Ihrer Antwort keinen zwingenden Grund für die Wahl von Nokogiri angegeben. –

+1

Es ist nicht gepflegt. Der Schöpfer von HPricot, genannt "Why the lucky steif" oder nur "why" oder "why" löschte kürzlich alle seine Online-Konten und Domains. Die ehemalige Homepage für hpricot war http://code.whytheluckystiff.net/hpricot/ (funktioniert nicht!). Siehe 3. Absatz von http://en.wikipedia.org/wiki/Why_the_lucky_stiff oder http://news.ycombinator.com/item?id=773106 als Referenz.Die Gemeinschaft schuf Spiegel für seine Arbeiten, z.B. http://github.com/whymirror/hpricot/tree/master für hpricot. Trotzdem ist der Code mehr oder weniger nicht gepflegt. Warum ist Twitter Angebot, um zu Nokogiri zu wechseln, nicht mehr verfügbar. –

0

Versuchen Hpricot in einer irb-Sitzung mit, weil ich dies in der Regel

 


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" 

Das Ihre Hpricot fein arbeitet, bedeutet nicht passieren sollte denken. Und das Problem liegt darin, dass Sie es in Rails verwenden. (Es wäre einfacher, wenn Sie Ihren Code einfügen könnten).

Ich hatte ein paar Probleme mit Hpricot (0.8.1) früher, musste zurück auf 0.6.164 Version wechseln. Sie können das versuchen, wenn Sie wollen.

HTH

1

Dieser Fehler tritt auf, da keine kompilierte Bibliothek für die Plattform vorhanden ist. Um dies für Ihre aktuelle hprikot-Version zu lösen, gehen Sie zu Ihrem Rails-Verzeichnis und gehen Sie folgendermaßen vor (vorausgesetzt, Sie verwenden einen entpackten Edelstein - dieses Problem würde sonst nicht aufkommen, außer Ihr Betriebssystem wurde seit der Installation des Edelsteins aktualisiert):

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

Kopieren Sie dann die kompilierte Bibliothek in das richtige Plattformverzeichnis für Ihr System. Jede Version von OS X eine etwas andere Plattform Namen hat, so Grube (Snow Leopard) erscheint als:

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

Das bedeutet, ich brauchte die Datei „hpricot_scan.bundle“ (OS X verwendet Bundles für gemeinsam genutzte Bibliotheken zu kopieren, unter Linux, dass „hpricot_scan.so“) in das folgende Verzeichnis wäre, wenn nötig zu schaffen:

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

Substitute die entsprechenden Plattformnamen (legt RUBY_PLATFORM von irb) für Ihre Maschine.

0

ausführen Im Folgenden Befehl und seine Werke

gem install hpricot --platform = mswin32