2009-11-19 34 views
1

這是我第一次問一個問題,請溫柔!在Ruby腳本的工作頁面上收到404 HTTPError

我有一個Rails應用程序處理一大堆域的內容(到目前爲止已超過100個)。每個域都指向我的應用的託管位置(如果您有興趣,Heroku)或託管的原始位置。每當域名準備就緒時,都需要指向heroku服務器,以便我的應用可以爲其提供內容。

要檢查域是否已成功從其原始位置切換到我的應用程序,我正在編寫一個腳本,查找我包含在其中的特殊隱藏標記。如果它找到標籤,那麼該域指向我的應用程序。如果沒有,它沒有改變,我記錄。

問題是,至少對於一個域,到目前爲止,我正在爲我的腳本獲取404 OpenURI :: HTTPError異常。這很奇怪,因爲我可以很好地訪問該網站,我甚至可以通過捲曲獲得它。有誰知道爲什麼一個工作網站會得到這樣的錯誤?這裏是重要的片段:

require 'rubygems' 
require 'open-uri' 
require 'hpricot' 
... 
url = "http://www.#{domainname}.com" 
doc = Hpricot(open(url)) #<---- Problem right here. 
... 

感謝您的幫助!

+0

請求或發佈答案時,確保將源代碼片段的格式設置爲源代碼。 (我這次爲你做了。) – 2009-11-19 20:24:53

+0

謝謝。我將來會這樣做。 – 2009-11-19 21:15:43

回答

0

歡迎來到SO!

這裏將是我的調試方法:

  1. 看看你能不能在IRB開放-URI單獨複製,沒有角度來說,Hpricot:

$ irb -rubygems -ropen-uri

>> open('http://www.somedomain.com')

  1. 查看你的Heroku日誌,看看它是否接觸到服務器。
  2. 請在您的原始服務器日誌中查找相同的日誌。
  3. 拋出類似Wireshark的東西來查看HTTP事務,並查看404是否確實回來。

從此開始,並返回您的結果。

+0

我用irb試過了;沒有Hpricot做同樣的事情。我所要求的網站並沒有指向heroku版本(這就是爲什麼它做了一個很好的測試;它應該被記錄下來進行修復),但是它正在阻止我的腳本免於這個錯誤。 如果您好奇,我試圖得到的網站是http://www.aquarium-equipment.com。我只需要紅寶石來打開補丁的東西! – 2009-11-19 21:24:22

+0

好的,我已經取得了進展。我放棄了open-uri方法,而是決定使用Net :: HTTP。這產生了輸出,而不是錯誤。但是,響應是404錯誤!該網站是完全可見的,所以我不明白爲什麼。由於curl得到正確的迴應,我必須假設它與ruby有關,或者ruby與服務器交互的方式。 – 2009-11-19 21:39:56

+0

您的服務器正在等待用戶代理。默認情況下,OpenURI不會發送一個。這個工程:'open('http://www.aquarium-equipment.com',「User-Agent」=>「Ruby /#{RUBY_VERSION}」)' – 2009-11-19 21:49:02

相關問題