壊れたリンクをチェックする方法があります:
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 return = 1 errno = 0 state = SSLv2 / v3 read server hello A:不明なプロトコル
例外がキャッチされた場合に出力され、タスクが実行を継続するようにこれを設定するにはどうすればよいですか?
また、結果配列を呼び出してメーラービューにレンダリングするにはどうすればよいですか?これを行うためのより良い方法はありますか?これにより、未公開のすべての製品を既存のメーラーに追加できますか?
ありがとう!