【问题标题】:How to set rails request timeout longer?如何设置 Rails 请求超时时间更长?
【发布时间】:2018-08-28 18:40:05
【问题描述】:

我的应用程序是在 Rails 上构建的,网络服务器是 puma。

我需要从数据库加载数据,加载所有数据需要 60 多秒。每次向服务器发送get请求,都要等待60多秒。

request get 的超时时间是 60 秒,所以我总是得到 504 网关超时。我在 puma 配置中找不到更改请求超时的地方。 如何将请求超时设置为超过 60 秒?

谢谢!

【问题讨论】:

  • 如果您的请求耗时超过 30 秒,这对于 Web 服务器来说是不可接受的,应该予以修复。增加暂停是在大便上贴上创可贴。您需要发布您的代码在 DB 中尝试执行的操作,这需要很长时间才能在此问题上获得更好的帮助。我没有否决你的问题。但请给我们一些帮助。

标签: ruby-on-rails timeout puma


【解决方案1】:

最好,您应该优化您的代码和查询以更快地响应,这样在生产环境中就不会有大流量进入您的应用程序的瓶颈。

如果你真的想增加响应时间,那么你可以使用 rack timeout 来做到这一点:

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

【讨论】:

  • 很抱歉我的描述令人困惑。我试过 rack-timeout,但问题是当我等待 60 秒时,我得到 504 网关超时。同时,数据库查询仍然有效,持续时间约为 90 秒(超过 60 秒)。所以每次我查询数据库时,我都无法在 60 秒内得到查询结果。 Rack-timeout 只限制查询的工作时间。
  • 我已经在我的本地机器上尝试了同样的方法,它似乎工作......你使用任何网络服务器,如 nginx 或 apache 吗??
  • 您应该使用 60 秒的 rack-timeout,然后添加一个小于 60 秒的数据库超时。例如,如果您使用 postgres 作为数据库,那么您可以使用 50 秒的 statement_timeout。
【解决方案2】:

更新:显然 worker_timeout 不是答案,因为它与整个过程挂起有关,而不仅仅是单个请求。所以这似乎是 Puma 不支持的东西,开发人员希望你用 Puma 的任何东西来实现它,比如 Nginx。

原文:Rails 本身不会超时,但如果您正在运行 Puma,请在 config/puma.rb 中使用 worker_timeout。示例:

worker_timeout (246060) 如果 ENV['RAILS_ENV']=='development'

Source

【讨论】:

  • 这不是请求超时,它是为了防止进程挂起或死机。设置此值不会防止缓慢的请求。
【解决方案3】:

这里的 504 错误是与 rails 服务器前面的网关有关,例如它可能是 Cloudflare 或 nginx 等。

所以设置就在那里。您必须增加那里的超时时间,以及在 rails/puma 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2016-01-16
    • 2022-12-11
    • 2018-12-12
    • 1970-01-01
    相关资源
    最近更新 更多