如何将rails请求超时设置得更长?

问题描述 投票:0回答:4

我的应用程序是基于 Rails 构建的,Web 服务器是 puma。

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

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

谢谢!

ruby-on-rails timeout puma
4个回答
5
投票

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

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

worker_timeout
。示例:

worker_timeout (246060) if ENV['RAILS_ENV']=='development'

来源


0
投票

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

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


0
投票

Puma 默认情况下不会根据时间超时请求

如果你看到类似的东西

Puma caught this error: R
equest ran for longer than 30000ms  (Rack::Timeout::RequestTimeoutErro
r

这意味着你有某种中间件可以给你这种行为,在上面的例子中它是https://github.com/zombocom/rack-timeout

在代码库中搜索

Rack::Timeout
,它看起来像这样:

  Rails.application.config.middleware.insert_before Rack::Runtime,
    Rack::Timeout,
    service_timeout: Integer(30000)

并更改配置以增加超时,或完全禁用(而不是插入)中间件。


-4
投票

最好,您应该优化代码和查询以在更快的时间内做出响应,以便在生产环境中应用程序出现大流量时不会出现瓶颈。

如果你确实想增加响应时间,那么你可以使用机架超时来做到这一点:

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

© www.soinside.com 2019 - 2024. All rights reserved.