我写了一个脚本,将通过我们的数据库中的所有客户,验证他们的网站网址的作品,并试图找到他们的主页上的Twitter链接。我们有超过10,000个网址进行验证。如果网址已经过验证,那么我们会为每个网址获取getaddrinfo错误。getaddrinfo错误与机械化
这里有擦伤单个URL代码的副本:
def scrape_url(url)
url_found = false
twitter_name = nil
begin
agent = Mechanize.new do |a|
a.follow_meta_refresh = true
end
agent.get(normalize_url(url)) do |page|
url_found = true
twitter_name = find_twitter_name(page)
end
@err << "[#{@current_record}] SUCCESS\n"
rescue Exception => e
@err << "[#{@current_record}] ERROR (#{url}): "
@err << e.message
@err << "\n"
end
[url_found, twitter_name]
end
注:我也运行一个版本的代码,创建被共享的所有调用scrape_url一个机械化实例。它的失败方式完全一样。
当我在EC2上运行此,它获得通过几乎完全1000个网址,然后返回该错误的剩余9,000+:
getaddrinfo: Temporary failure in name resolution
注意,我同时使用Amazon的DNS服务器和谷歌的DNS尝试服务器,认为它可能是一个合法的DNS问题。在这两种情况下我都得到了完全相同的结果。
然后,我试着在我的本地MacBook Pro上运行它。它只能通过约250返回了这个错误的的记录剩余部分之前:
getaddrinfo: nodename nor servname provided, or not known
有谁知道我怎样才能拿到剧本通过所有的记录做呢?
向我们展示它失败的网址。 – pguardiario
约有9000人失败。一个例子是http://www.agilecommerce.com。如果插入浏览器,URL往往会工作。 – EricM
你能用完内存吗? – pguardiario