2011-08-09 25 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 

這種方法崩潰後法(whois的創業板提供了一個錯誤),並且不會繼續檢查域的其餘部分。有什麼辦法可以讓它繼續檢查其餘的域名,即使它在一個域名上崩潰?至少直到我可以理清每個域的phide。使得Ruby/Rails的繼續,當談到在無效網址遇到錯誤

回答

3

當你說

撞車出局

我假設你的意思是,你越來越引起的異常。如果是這種情況,那麼只需要捕獲異常,按照你的需要進行操作(將地址存儲在bad_email表中或其他地方),然後繼續做你正在做的事情。你的日誌文件會告訴正在引發什麼異常,所以你知道你的急救的說法應該是什麼

所以

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 

如果你指的是別的東西像整個應用程序垂死然後我haven'ty得到了線索和沒有足夠的信息進一步建議。對不起

+0

我不知道我會爲救援做些什麼,但我只是想讓它繼續到下一個域。 – Rickmasta

+1

你可以做任何你想要的或者什麼也不做的。將錯誤的電子郵件地址存儲在bad_email表中,以便下次更容易地將它們過濾出來似乎是一件足夠合理的事情。我會更新我的答案 – jamesc

+2

你可以把'下一個'在救援。這告訴迭代轉到下一個項目。但是由於你在迭代過程中已經開始救援,所以救援工作也沒有任何內容。 – Mischa

2

正如jamesw所說,你可以將這些語句包裝在一個異常處理程序中,在它們發生時處理它們。讓我進一步建議,無論您的程序何處獲取這些(可能無效的)域名,只要您收到它們,就會立即驗證它們,並丟棄無效的域名。這樣,當你到達這個循環時,你已經知道你正在迭代一個好域名列表。

編輯:對於域名驗證,請檢查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 
相關問題