2011-08-09 5 views
2
def checkdomains 
    @domains = Domain.all 

    #@domains.where(:confirmed => "yes").each do |f| 
    @domains.each do |f| 
    r = Whois.whois(f.domain) 
    if r.available? == true 
     EmailNotify.notify_email(f).deliver 
    end 
    end 
end 

このメソッドは、無効なURL(whois宝石にエラーが発生します)が発生するとクラッシュし、残りのドメインのチェックは続行しません。あるドメインがクラッシュしても残りのドメインをチェックし続ける方法はありますか?少なくとも、私は各ドメインをフィッシングアウトすることができます。あなたはエラーが発生した後にRuby/Railsメソッドを続行させる

をクラッシュ言うとき

答えて

3

私はあなたが発生した例外を取得していることを意味想定しています。これが当てはまる場合は、例外をトラップするだけで済みます(bad_emailテーブルにアドレスを格納するなど)。あなたは私が得たhaven'tyその後、瀕死の全アプリのような何か他のものを参照している場合は、あなたの救助文がそう

begin 
    r = Whois.whois(f.domain) 
    if r.available? == true 
    EmailNotify.notify_email(f).deliver 
rescue WhateverException 
    #do something here like re raise the error or store the email address in a bad_emails table or do both just simply do nothing at all 
end 

どうあるべきかを知っているので、あなたのログファイルが提起されているものは例外教えてくれます手がかりとそれ以上の助言をするのに十分な情報がありません。申し訳ありません

+0

私は救助のために何をするか分かりませんが、私はそれを次のドメインに継続したいと考えています。 – Rickmasta

+1

あなたは何でもできますか何もしません。 bad_emailテーブルに悪質な電子メールアドレスを格納すると、次回より簡単にフィルタリングできるようになります。私は自分の答えを更新します – jamesc

+2

あなたは救助の中に 'next'を置くことができました。これは、次の項目に進むように反復を指示します。しかし、あなたは反復の中で救助活動を開始しているので、救助活動の中に何も置かないでください。 – Mischa

2

jameswが示唆しているように、ステートメントを例外ハンドラにラップすることができます。さらに、あなたのプログラムがこれらのドメイン名(おそらく無効なドメイン名)を取得した場合は、取得したらすぐにそのドメイン名を検証し、無効なドメイン名を取り除くことをお勧めします。そうすれば、このループに到達するまでに、あなたは良いドメインのリストを反復していることをすでに知っています。

EDIT:ドメイン名検証の場合は、hereをチェックしてください。

+0

私はフォーマットバリデーションを追加しました。しかし、まだ無効なTLDのようなものがあります。 – Rickmasta

8
@domains.each do |f| 
    begin 
     r = Whois.whois(f.domain) 
     if r.available? == true 
     EmailNotify.notify_email(f).deliver 
     end 
    rescue Exception => e 
     puts "Error #{e}" 
     next # <= This is what you were looking for 
    end 
    end 
関連する問題