Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
随机超时:使用Mechanize Gem的Ruby中的错误异常_Ruby_Web Scraping_Mechanize_Rails Activerecord_Mechanize Ruby - Fatal编程技术网

随机超时:使用Mechanize Gem的Ruby中的错误异常

随机超时:使用Mechanize Gem的Ruby中的错误异常,ruby,web-scraping,mechanize,rails-activerecord,mechanize-ruby,Ruby,Web Scraping,Mechanize,Rails Activerecord,Mechanize Ruby,我正在Ruby 1.9.3-p327中构建一个应用程序,它获取解析一些页面(废弃),然后根据一些值将一些列插入/更新到数据库中。为了获取解析,应用程序使用Mechanize gem,通过activerecord gem访问数据库(MySQL) 我遇到的一个奇怪的问题是,有时会出现一个Timeout::Error异常,这种异常是随机产生的,有时不会发生,但可能在两天之后就会发生,并且记录或页面的类型也不同。异常的日志为: /root/.rbenv/versions/1.9.3-p327/lib/r

我正在Ruby 1.9.3-p327中构建一个应用程序,它获取解析一些页面(废弃),然后根据一些值将一些列插入/更新到数据库中。为了获取解析,应用程序使用Mechanize gem,通过activerecord gem访问数据库(MySQL)

我遇到的一个奇怪的问题是,有时会出现一个Timeout::Error异常,这种异常是随机产生的,有时不会发生,但可能在两天之后就会发生,并且记录或页面的类型也不同。异常的日志为:

/root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill': too many connection resets (due to Timeout::Error - Timeout::Error) after 0 requests on 21716860, last used 1378984537.2796552 seconds ago (Net::HTTP::Persistent::Error)
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/protocol.rb:132:in `readline'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:2551:in `read_new'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:1316:in `catch'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/net/http.rb:1293:in `request'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/net-http-persistent-2.9/lib/net/http/persistent.rb:986:in `request'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:257:in `fetch'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/mechanize-2.7.2/lib/mechanize.rb:432:in `get'
    from /root/notificador-corte/lib/downloader.rb:10:in `fetch'
    from /root/notificador-corte/worker.rb:63:in `fetch_page'
    from /root/notificador-corte/worker.rb:49:in `process_causa'
    from /root/notificador-corte/worker.rb:41:in `block in worker_main_cycle'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-4.0.0/lib/active_record/relation/delegation.rb:13:in `each'
    from /root/.rbenv/versions/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-4.0.0/lib/active_record/relation/delegation.rb:13:in `each'
    from /root/notificador-corte/worker.rb:39:in `worker_main_cycle'
    from /root/notificador-corte/worker.rb:26:in `run'
    from /root/notificador-corte/app.rb:12:in `<main>'
第63行中的worker.rb包含对fetch方法的调用

阅读文档时,我说我应该尝试设置代理的读取超时打开超时属性(机械化),并尝试使用空闲超时保持活动状态,但错误仍然是随机的

该文件的内容是:

gem 'activerecord', "~> 4.0.0" 
gem 'mechanize', "~> 2.7.1"
gem 'mysql', '~> 2.9.1'
gem 'actionmailer', "~> 4.0.0" 
gem 'rspec', "~> 2.14.1"

我不认为它一定是你的代码中的一个bug,也不认为它是自我机械化的。很可能是网络问题


我宁愿在
rescue
语句中实现一个策略,这样您就可以确保,每当发生此错误时,您都可以确保在以后的某个时间点“重试”。

当您进行rescue时,您可以

 Errno::ETIMEDOUT
这个小姐拼写正确吗?还是我不熟悉的东西


你的问题很可能是一些不好的网站或链接。我在上网时遇到了各种各样的问题。我发现最好捕获所有错误,打印错误消息,然后继续执行下一个可能的操作。。这样你的刮刀就不会在坏的情况下停下来,你可以回去解决出现的问题。

目前似乎是关于mechanize的一个公开问题。您可能想在这里阅读和评论:没有Rails的Mechanize也有同样的问题。
 Errno::ETIMEDOUT