Tag: 超时

ruby 2.1.2超时仍然不是线程安全吗?

我有50个sidekiq线程爬网,几周前线程在运行大约20分钟后开始挂起。 当我进行回溯转储时,大多数线程都停留在net / http初始化: /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:879:in `initialize’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:879:in `open’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:879:in `block in connect’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:76:in `timeout’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:878:in `connect’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:863:in `do_start’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:858:in `start’ /app/vendor/bundle/ruby/2.1.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:700:in `start’ /app/vendor/bundle/ruby/2.1.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:631:in `connection_for’ /app/vendor/bundle/ruby/2.1.0/gems/net-http-persistent-2.9.4/lib/net/http/persistent.rb:994:in `request’ /app/vendor/bundle/ruby/2.1.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:257:in `fetch’ /app/vendor/bundle/ruby/2.1.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:974:in `response_redirect’ /app/vendor/bundle/ruby/2.1.0/gems/mechanize-2.7.2/lib/mechanize/http/agent.rb:298:in `fetch’ /app/vendor/bundle/ruby/2.1.0/gems/mechanize-2.7.2/lib/mechanize.rb:432:in `get’ /app/app/workers/crawl_page.rb:24:in `block in perform’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:91:in `block in timeout’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:35:in `block in catch’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:35:in `catch’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:35:in `catch’ /app/vendor/ruby-2.1.2/lib/ruby/2.1.0/timeout.rb:106:in `timeout’ 我不认为sidekiq会卡在net / http上,因为我在超时中包装了整个调用: […]

Rescue_from不会从视图或帮助程序中解救Timeout :: Error

我的应用程序控制器中有一个around_filter来封装超时块中的所有操作,以便在达到30秒Heroku限制之前操作失败。 我还有一个来自Timeout :: Error的rescue_来干净地拯救这些超时。 不幸的是,rescue_from只在某些时候起作用。 如果在控制器内执行时发生超时,它可以正常工作,但如果超时发生在视图或帮助器中则无法解决。 Interout :: Errorinheritance的Interrupt和SignalException都没有正确地进行救援。 但是,抢救Exception本身确实可以在视图和帮助程序中正确地进行救援。 around_filter :timeout rescue_from Timeout::Error, :with => :timeout_rescue def timeout Timeout::timeout(10){ yield } end def timeout_rescue # Rescued end 有没有其他方法来拯救Timeout :: Error让这个工作?

如何增加Heroku 30s h12超时

我正在运行一个rails应用程序,它有一个来自用c ++开发的本地客户端的json webservice调用(带有多部分jsonforms的post命令,上传流式文件) 我已经阅读了关于路由网格的 Heroku文档,提到了关于http连接的30s Heroku限制,以及关于长轮询选择,指的是工作人员dynos。 在我的电话中,我处理pdf文件并在其中插入签名。 这个pdf文档可以是100kb或11Mb(或者更多)。 我知道我最终必须在后台进程中执行此操作,但我希望在必须之前避免这样做。 你知道增加超时的方法吗? 正如您在下面的代码中看到的那样,我在保存后处理我的文档(我在after_save执行此操作,但更改为希望在处理之前发送响应的控制器)。 我希望客户端在文档处理之前得到一个响应,但我仍然在heroku端有一个超时,而在我的客户端有一个错误。 这一切都适用于较小的文档,但对于一个121页的pdf文档只有400kb,它吹掉.. 最后,我的文件被上传,所以我需要的是在发送超时响应之前,该响应将继续到我的客户端应用程序… 有什么建议? 我的错误: at=error code=H12 desc=”Request timeout” method=POST path=/documents host=fierce-beach-2720.herokuapp.com fwd=”81.193.155.217/bl4-155-217.dsl.telepac.pt” dyno=web.1 queue=0ms wait=0ms connect=1ms service=32272ms status=503 bytes=0 我的控制器: respond_to do |format| if @document.save! format.html { redirect_to root_path, :flash => { :success => ‘Document was successfully created.’} } format.json { render json: […]

如果远程URL没有返回/超时问题,使用Open-URI获取XML和最佳实践?

只要没有远程错误,当前代码就可以工作: def get_name_from_remote_url cstr = “http://someurl.com” getresult = open(cstr, “UserAgent” => “Ruby-OpenURI”).read doc = Nokogiri::XML(getresult) my_data = doc.xpath(“/session/name”).text # => ‘Fred’ or ‘Sam’ etc return my_data end 但是,如果远程URL超时或什么都不返回怎么办? 例如,我如何检测到并返回nil? 而且,Open-URI是否提供了一种方法来定义在放弃之前等待多长时间? 当用户等待响应时调用此方法,那么我们如何在放弃之前设置最大timeoput时间并告诉用户“抱歉我们尝试访问的远程服务器现在不可用”?

Ruby Timeout :: timeout不会触发Exception,也不会返回记录的内容

我有这段代码: begin complete_results = Timeout.timeout(4) do results = platform.search(artist, album_name) end rescue Timeout::Error puts ‘Print me something please’ end 然后我启动包含此代码的方法,以及这里是堆栈跟踪的开始: exception消息:执行已过期 exception回溯:/*** /ย/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/1.8/timeout.rb:64:i 所以我天真地认为我的通话时间已经过去了。 但是“打印我喜欢的东西”永远不会被打印出来,而且假设是超时状态返回值(无论是真还是假,如文档中提到的那样),完全不是布尔值。 难道我做错了什么?

是否有一个Groovy等效的Ruby Timeout模块?

在Ruby中,我会使用Timeout模块,它执行一个块,并在超时时停止执行代码。 require ‘timeout’ status = Timeout::timeout(5) { # Something that should be interrupted if it takes too much time… } Groovy有这样的东西吗?

Ruby Net :: HTTP超时

我正在尝试编写我的第一个Ruby程序,但是有问题。 该代码必须通过HTTP下载32个MP3文件。 它实际上下载了一些,然后是超时。 我尝试设置超时时间,但没有区别。 在Windows下运行代码,Cygwin和Mac OS X具有相同的结果。 这是代码: require ‘rubygems’ require ‘open-uri’ require ‘nokogiri’ require ‘set’ require ‘net/http’ require ‘uri’ puts “\n Up and running!\n\n” links_set = {} pages = [‘http://www.vimeo.com/siai/videos/sort:oldest’, ‘http://www.vimeo.com/siai/videos/page:2/sort:oldest’, ‘http://www.vimeo.com/siai/videos/page:3/sort:oldest’] pages.each do |page| doc = Nokogiri::HTML(open(page)) doc.search(‘//*[@href]’).each do |m| video_id = m[:href] if video_id.match(/^\/(\d+)$/i) links_set[video_id[/\d+/]] = m.children[0].to_s.split(” at “)[0].split(” — “)[0] end […]

ruby超时和系统命令

我有一个ruby超时,调用这样的系统(bash)命令.. Timeout::timeout(10) { `my_bash_command -c12 -o text.txt` } 但我认为即使ruby线程被中断,实际命令仍然在后台运行..这是正常的吗? 我怎么能杀了它?