我測試了一段代碼,以ping我定期的一堆網站,以確保他們起來。代碼ping網站有時工作
我正在使用rails並且到目前爲止我有這個可怕的測試操作,我正在試用它(請參閱下文)。
雖然問題是,有時它有效,有時它不會......有時候它通過代碼運行得很好,其他時候,它似乎完全忽略了開始/救援塊...
a。我需要幫助弄清楚問題是什麼 b。並重構這使它看起來很可敬。
非常感謝您的幫助。
編輯1:這裏是更新的代碼,對不起了這麼久,pastie.org下降了,因爲昨天http://pastie.org/927201
它仍然在做同樣的事情...跳過開始塊(因爲它僅更新up_check_time )...但是,如果其中一個網站超時,它實際上會正確更新所有內容(check_msg,代碼等)......令人困惑,是嗎?
require 'net/http'
require 'uri'
def ping
@sites = NewsSource.all
@sites.each do |site|
if site.uri and !site.uri.empty?
uri = URI.parse(site.uri)
response = nil
path = uri.path.blank? ? '/' : uri.path
path = uri.query.blank? ? path : "#{path}?#{uri.query}"
begin
Net::HTTP.start(uri.host, uri.port) {|http|
http.open_timeout = 30
http.read_timeout = 30
response = http.head(path)
}
if response.code.eql?('200') or response.code.eql?('301') or response.code.eql?('302')
site.up = true
else
site.up = false
end
site.up_check_msg = response.message
site.up_check_code = response.code
rescue Errno::EBADF
rescue Timeout::Error
site.up = false
site.up_check_msg = 'timeout'
site.up_check_code = '408'
end
site.up_check_time = 0.seconds.ago
site.save
end
end
end
NICE! 編輯...會稍微轉貼,但我還有一個問題?是否有可能一次拯救多個例外......這就是我試圖(笨拙地)用救援塊來做的事情...... – concept47 2010-04-20 09:34:57
是的,我想你可能一直試圖拯救多個例外。我只是不確定。要做到這一點,用逗號分隔它們。 '救援Errno :: EBADF,超時::錯誤' – mikej 2010-04-20 10:03:03
感謝邁克,我昨天通過查看Ruby案例陳述是如何做到的,但是無論如何感謝:D。這是更新的代碼... http://pastie.org/927201。它仍然做同樣的事情...跳過開始塊(我說,因爲它通常只會更新up_check_time)...但是,如果其中一個網站超時,它實際上會正確更新所有內容(check_msg,代碼等)......令人困惑,是嗎? – concept47 2010-04-21 02:40:44