當我在本地運行Nokogiri與運行在我的服務器上時,我遇到了一些奇怪的差異。在我的本地機器上整個文檔似乎解析並可用,但在服務器上我似乎得到了文檔類型選項卡和一些隨機的評論標籤。Nokogiri解析服務器與本地主機的不同
首先,確保它不是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
唯一明顯的區別寶石對於JS編譯器 - 所有其他寶石之間的確切版本本地和服務器:
Local => libv8 (3.3.10.4 x86-darwin-10)
Server => libv8 (3.3.10.4 x86_64-linux)
任何想法如何弄清楚是怎麼回事和/或解決這一問題?
更新 - 隔離問題的實際位置我從服務器和本地主機中拉出一個文件,然後在每個文件上運行它們。下面的結果顯示,問題肯定就在於引入nokogiri - 是什麼問題,我仍然...
困惑本地運行:
# 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
你有沒有嘗試過使用curl或類似的東西,看看你打的URL是否只是在不同的情況下返回不同的東西? –
是的 - 我使用irb的open-uri來確認我收到的數據在兩種情況下都是有效的。大小似乎是不同的,但似乎是在服務器上刪除了空白區域,而不是在本地主機上。當我比較它們時,實際標記似乎是相同的。 – finn0013
驗證我的迴應我剛剛嘗試複製本地主機上open-uri的響應,將其保存到服務器上的文件中,然後將其讀入Nokogiri。然後我得到了預期的結果,這告訴我open-uri確實正在返回一些不同的東西,即使它在我的初始分析中看起來是一樣的。現在沿着這條路走下去...... – finn0013