5

我正在使用 heroku 来托管一个支持 iOS 应用程序的 ruby​​ on rails 应用程序。我有一个可能会运行很长时间的请求,我需要能够在我的请求被终止之前捕获超时。我正在使用 Timeout::timeout(15) 引发错误并适当地处理它。这在我的本地工作正常,我可以看到错误被抛出和记录。当我在 heroku 上运行相同的代码时,不会记录任何错误。尝试使用机架超时 gem 时我遇到了同样的问题。

是否有其他人在 Heroku 上运行超时时遇到问题?我在雪松上。

4

2 回答 2

4
# app/controllers/index_controller.rb
require 'timeout'
Class IndexController < ApplicationController
  def timeout
    begin
      status = Timeout::timeout(5) {
        sleep(6)
        render :text => "will never be rendered"
      rescue Timeout::Error
        render :text => "timeout handled"
      end
    end
  end
end

# config/routes.rb

match '/timeout' => "index#timeout"

This works fine on heroku: http://young-gorge-7585.herokuapp.com

于 2013-08-07T05:21:55.677 回答
0

看看使用 Rack::Timeout,专为此目的而设计。

https://github.com/kch/rack-timeout

于 2013-08-12T18:38:32.223 回答