Tôi đã viết một tập lệnh sẽ đi qua tất cả các khách hàng trong cơ sở dữ liệu của chúng tôi, xác minh rằng URL trang web của họ hoạt động và cố gắng tìm một liên kết twitter trên trang chủ của họ. Chúng tôi có ít hơn 10.000 URL để xác minh. Sau một phần nhỏ nếu các url được xác minh, chúng tôi bắt đầu nhận các lỗi getaddrinfo cho mỗi URL.Lỗi getaddrinfo với Mechanize
Dưới đây là một bản sao của mã mà cạo một URL duy nhất:
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
Lưu ý: Tôi cũng đã chạy một phiên bản của mã này tạo ra một trường hợp mechanize duy nhất được chia sẻ trên tất cả các cuộc gọi đến scrape_url. Nó thất bại trong chính xác cùng một thời trang.
Khi tôi chạy trên EC2, nó được thông qua gần như chính xác 1.000 url, sau đó trả về lỗi này cho phần còn lại 9,000+:
getaddrinfo: Temporary failure in name resolution
Lưu ý, tôi đã cố gắng sử dụng cả hai máy chủ của Amazon DNS và DNS của Google máy chủ, nghĩ rằng nó có thể là một vấn đề DNS hợp pháp. Tôi đã nhận được kết quả tương tự trong cả hai trường hợp.
Sau đó, tôi đã thử chạy trên MacBook Pro cục bộ của mình. Nó chỉ có khoảng 250 trước khi trả lại lỗi này cho phần còn lại của các bản ghi:
getaddrinfo: nodename nor servname provided, or not known
Có ai biết làm thế nào tôi có thể có được kịch bản để làm cho nó thông qua tất cả các hồ sơ?
Hiển thị cho chúng tôi url không thành công. – pguardiario
Nó thất bại trên khoảng 9.000 người trong số họ. Một ví dụ là http://www.agilecommerce.com. Các URL có xu hướng hoạt động nếu được cắm vào trình duyệt. – EricM
bạn có thể hết bộ nhớ không? – pguardiario