我有一种检查断开链接的方法:
def self.check_prod_links
require 'net/http'
results = []
Product.find_each(:conditions =>{:published => 1}) do |product|
url = product.url
id = product.id
uri = URI(url)
begin
response = Net::HTTP.get_response(uri)
rescue
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
rescue
response = Net::HTTP.get_response("http://" + uri)
rescue => e
p "Problem getting url: #{url} Error Message: #{e.message}"
end
p "Checking URL = #{url}. ID = #{id}. Response Code = #{response.code}"
unless response.code.to_i == 200
product.update_attribute(:published, 0)
results << product
end
end
return results
end
我的理解是,rescue => e 应该记录之前的救援语句未捕获的所有异常,并且该方法应该继续运行,但是由于某种原因,当检查某些 URL 时,脚本退出并出现以下异常:
SSL_connect 返回=1 errno=0 state=SSLv2/v3 读取服务器你好 A:未知协议
我该如何设置它,以便如果捕获到异常,它将被打印,并且任务将继续运行?
另外,如何调用结果数组以在邮件视图中呈现,有没有更好的方法可以将所有未发布的产品添加到已经存在的邮件中?
谢谢!