【问题标题】:Using rack-timeout gem on Rails在 Rails 上使用 rack-timeout gem
【发布时间】:2013-06-06 12:48:15
【问题描述】:

我正在尝试在 Rails 上使用 rack-timeout gem。我将gem 'rack-timeout' 行添加到我的Gemfile 并运行bundle install。 (它显示Using rack-timeout (0.0.4))然后我向我的服务器提交了一个请求。它显然挂了超过 15 秒,没有返回任何东西给我。我错过了什么?

【问题讨论】:

  • 默认情况下,看起来 rack-timeout 默认为 15 秒。至于返回 - 那是你自己的错......你可能在某个地方有错误的逻辑
  • 如果我的控制器中的逻辑没有在 15 秒内完成,机架超时不应该强制它返回吗?也许我误解了什么......
  • 好吧 - 我对机架超时一无所知。看起来它的目的是“中止花费太长时间的请求”。如果这是真的,那么您可能没有正确处理错误?如果失败,它看起来会返回Rack::Timeout::Error。如果是这样 - 你应该有一个故障安全来重定向用户
  • 我也很无知。希望有人知道如何在请求超过 15 秒时重定向用户。
  • 看看@JessWolgamott 的答案。看起来这可能是答案

标签: ruby-on-rails time


【解决方案1】:

当抛出 Rack::Timeout 错误时,您需要告诉 Rails 该怎么做。

  • 如果您忽略它,执行将在 15 秒后停止(或您配置的任何值)
  • 如果您想向用户显示一个不错的错误,您需要从该异常中解救出来(如下所示)。

你可以这样做

class ApplicationController < ActionController::Base

  rescue_from Timeout::Error, with: :handle_timeout

  protected
  def handle_timeout
    render "shared/timeout"
  end
end

【讨论】:

    猜你喜欢
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2015-11-06
    • 2011-05-03
    • 2012-11-14
    • 1970-01-01
    相关资源
    最近更新 更多