3

Nokogiri をローカルで実行している場合とサーバーで実行している場合では、奇妙な違いがあります。私のローカル マシンでは、ドキュメント全体が解析されて利用可能になっているように見えますが、サーバーでは、doctype タブといくつかのランダムなコメント タグを取得しているようです。

まず、open-uri の問題ではないことを確認するためにチェックしました。結果は正確ではありませんが、正しいマークアップが含まれています。

ローカル:

ruby-1.8.7-p352 :005 > s = open('http://www.pennstateind.com/store/PK2WAY.html')
=> #<File:/var/folders/G8/G8bsAGBk1o82Eyks3ZmFtq-+3Y6/-Tmp-/open-uri20120626-5891-10y2ncr-0> 
ruby-1.8.7-p352 :006 > s.length
=> 88408 

サーバ:

rb(main):008:0> s = open('http://www.pennstateind.com/store/PK2WAY.html')
=> #<File:/tmp/open-uri20120626-22167-1td2l72-0>
irb(main):009:0> s.length
=> 98184

これをローカル マシンで実行すると、次のようになります。

ruby-1.8.7-p352 :003 > d = Nokogiri::HTML(open('http://www.pennstateind.com/store/PK2WAY.html'))
=> [ OUTPUT OMITTED FOR BREVITY - CAN SUPPLY ON REQUEST ] 
ruby-1.8.7-p352 :004 > d.to_s.length
=> 85212  

しかし、これをサーバーで実行すると、次のようになります。

rb(main):006:0> d = Nokogiri::HTML(open('http://www.pennstateind.com/store/PK2WAY.html'))
=> #<Nokogiri::HTML::Document:0x36620e14b580 name="document" children=   [#<Nokogiri::XML::DTD:0x36620e14b1c0 name="html">, #<Nokogiri::XML::Comment:0x36620e14b170 " Open Graph Tags ">, #<Nokogiri::XML::Comment:0x36620e14a98c " Customer_Session_Verified: 0 ">]>
irb(main):007:0> d.to_s.length
=> 172

gem の明らかな違いは JS コンパイラだけです。他のすべての gem は、ローカルとサーバーの間の正確なバージョンです。

Local => libv8 (3.3.10.4 x86-darwin-10)
Server => libv8 (3.3.10.4 x86_64-linux)

何が起こっているのかを理解したり、これを修正したりする方法はありますか?


更新-問題が実際にどこにあったかを特定するために、サーバーとローカルホストからファイルを取得し、それぞれで実行しました。以下の結果は、問題は間違いなくノコギリにあることを示しています - 問題は何であるか、私はまだ困惑しています...

ローカルで実行:

# FILE ORIGINALLY PULLED FROM SERVER

ruby-1.8.7-p352 :015 > server_file = File.open("/Users/jmcdonald/Desktop/files/SERVER.txt", "r")
=> #<File:/Users/jmcdonald/Desktop/files/SERVER.txt> 
ruby-1.8.7-p352 :016 > server_file.read.length
=> 93071 

ruby-1.8.7-p352 :022 > Nokogiri::HTML(server_file).to_s.length
=> 98793

# FILE ORIGINALLY PULLED FROM LOCALHOST

=> #<File:/Users/jmcdonald/Desktop/files/LOCAL.txt> 
ruby-1.8.7-p352 :018 > local_file.read.length
=> 89622

ruby-1.8.7-p352 :026 > Nokogiri::HTML(local_file).to_html.length
=> 94632

サーバーで実行中:

# FILE ORIGINALLY PULLED FROM SERVER

irb(main):001:0> sf = File.open('/home/charlest/public_html/files/nokogiri_issue/SERVER.txt', 'r')
=> #<File:/home/charlest/public_html/files/nokogiri_issue/SERVER.txt>
irb(main):002:0> sf.read.length
=> 93071

irb(main):004:0> Nokogiri::HTML(sf).to_s.length
=> 896      # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< WRONG

# FILE ORIGINALLY PULLED FROM LOCALHOST

irb(main):008:0> lf = File.open('/home/charlest/public_html/files/nokogiri_issue/LOCAL.txt', 'r')
=> #<File:/home/charlest/public_html/files/nokogiri_issue/LOCAL.txt>
irb(main):009:0> lf.read.length
=> 89622

irb(main):011:0> Nokogiri::HTML(lf).to_s.length
=> 896      # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< WRONG
4

3 に答える 3

2

サーバーとローカル環境が異なるバージョンのlibxml2を使用しているようです。古いバージョンには奇妙な解析バグがあることが知られているため、サーバーを可能な限り最新のバージョン (または少なくとも開発に使用しているのと同じバージョン) に更新すると、問題が解決するはずです。

于 2012-06-28T18:08:49.090 に答える
2

Nokogiri の出荷バージョンにもバグがあり (1.5.1 に影響したと思います)、限られた状況での解析に影響を与えました。gem が更新されていることを確認することをお勧めします。(宝石の更新)

于 2012-06-27T16:29:29.813 に答える
0

Nokogiri を使用して解析する前に、使用するFile#readか、File#open実行していることを確認してください。lf.rewind表示されている動作は、ファイル ハンドルがファイルの最後にあることが原因である可能性が高く、lfNokogiri が空のドキュメントを解析していることを意味します。

> remote = File.open('./PK2WAY.html')
# => #<File:./PK2WAY.html>
> remote.read.length
# => 92978
> remote.read.length
# => 0
> Nokogiri::HTML(remote).to_s.length
# => 108
> remote.rewind
# => 0
> Nokogiri::HTML(remote).to_s.length
# => 93847
于 2012-06-27T19:05:57.003 に答える