• rails timeout 异常


    发现经常有”超时“的错误信息,如/usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill': execution expired (Timeout::Error),恩,应该是网络不稳定或者是服务器响应太慢的结果,需要捕获下这个异常并做些处理,记录如下: 

    需要注意的是,Timeout::Error不是StandardError的子类, 而是继承至 Interrupt class,所以捕获的时候,需要格外注意,演示如下: 



    require 'net/pop3'   
    begin   
      Net::POP3.auth_only(@server, @port, @username, @password)   
    rescue => e   
      write_error_to_logfile(e)   
      do_something_sensible   
    end   


    看上面的这段代码,当POP3服务器不能及时响应的时候,所触发的异常并不能被下面捕获到,原因就是上面说的,再看正确的处理代码: 



    require 'net/pop3'   
    begin   
      Net::POP3.auth_only(@server, @port, @username, @password)   
    rescue => e   
      write_error_to_logfile(e)   
      do_something_sensible   
    rescue Timeout::Error => e   
      write_error_to_logfile(e)   
      do_something_sensible_for_timeout   
    end   


    这段代码可以正常工作,并按照我们的意愿来处理了。 

    如果您知道对方的服务器会比较慢的响应,或者你知道网络状态不好,你可以单独设置这个TimeOut的时间,代码如下: 


    require 'timeout'   
       
    ...   
    ...   
    begin   
      timeout(60) do   
         resp, body=3Dh.get('/index.html')   
         puts body   
      end   
    rescue TimeoutError   
           puts "Timed Out"   
    end  





    或者这样:(来源:http://textsnippets.com/posts/show/868) 


    http = Net::HTTP.new(url.host, url.port)   
    http.read_timeout=time_out  

    转自 http://hlee.iteye.com/blog/353732

  • 相关阅读:
    Python Data Analysis Library¶
    matadon/mizuno
    MySQL 5.1参考手册
    Apache Derby: Quick Start
    JRuby大捷:ThoughtWorks宣布Mingle发布在即
    RailsWithH2InJNDIOnJetty
    Embedded Jetty and Spring: The Lightweight Antidote for Java EE Complexity
    window下安装解压缩版mysql/zip压缩文件包非install安装程序
    Chapter 9. Extending Workbench
    Mysql手动增加一列_Blog of Grow_百度空间
  • 原文地址:https://www.cnblogs.com/x123811/p/6861192.html
Copyright © 2020-2023  润新知