데이터베이스의 모든 고객을 대상으로 스크립트를 작성하여 웹 사이트 URL이 작동하는지 확인하고 해당 홈페이지에서 트위터 링크를 찾으십시오. 확인할 URL이 10,000 개가 넘습니다. URL의 일부가 검증 된 후에 모든 URL에 대해 getaddrinfo 오류가 발생하기 시작합니다.기계로 가공 한 getaddrinfo 오류
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
참고 :
여기에 하나의 URL을 긁는 코드의 복사본입니다 또한 모든 scrape_url 호출간에 공유됩니다 하나의 기계화 인스턴스를 만들고이 코드의 버전을 실행했습니다. 정확히 같은 방식으로 실패했습니다. 내가 EC2에서이 프로그램을 실행할 때
, 그것은 다음 9,000+ 나머지에 대해이 오류를 반환, 거의 정확하게 1000 URL을 통해 가져옵니다
getaddrinfo: Temporary failure in name resolution
주, 나는 아마존의 DNS 서버와 구글의 DNS를 모두 사용하여 시도했다 서버가 합법적 인 DNS 문제 일 수 있다고 생각합니다. 두 경우 모두 똑같은 결과를 얻었습니다.
그런 다음 로컬 MacBook Pro에서 실행 해 보았습니다.
이getaddrinfo: nodename nor servname provided, or not known
사람이 내가 스크립트가 모든 레코드를 통해 그것을 만들 얻을 수있는 방법을 알고 있나요 : 그것은 단지 기록의 나머지 부분이 오류를 반환하기 전에 약 250를 통해있어?
agent.history.max_size = 10
그것은 내가 해결책을 발견
우리가 실패하고있는 URL을 보여주십시오. – pguardiario
약 9,000 명이 실패합니다. 한 가지 예가 http://www.agilecommerce.com입니다. URL은 브라우저에 연결하면 작동하는 경향이 있습니다. – EricM
메모리가 부족할 수 있습니까? – pguardiario