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 gem出错)时崩溃,并且不会继续检查其余域。有什么方法可以让它继续检查其余的域,即使它崩溃了吗?至少在我能解决每个域名的问题之前。
答案 0 :(得分:9)
@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
答案 1 :(得分: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
如果你指的是整个应用程序死亡之类的其他东西,那么我就没有线索,而且没有足够的信息可以进一步提供建议。遗憾
答案 2 :(得分:2)
正如jamesw建议的那样,您可以将语句包装在异常处理程序中,在它们发生时处理它们。让我进一步建议,无论您的程序获得这些(可能是无效的)域名,您只要获得它们就会对它们进行验证,然后抛弃无效的域名。这样,当你到达这个循环时,你已经知道你正在迭代一个好域名列表。
编辑:对于域名验证,请检查here。