ruby-on-rails 如何设置rails请求超时时间更长?

7ivaypg9  于 12个月前  发布在  Ruby
关注(0)|答案(4)|浏览(117)

我的应用程序是建立在rails上的,网络服务器是puma。
我需要从数据库中加载数据,加载所有数据需要60多秒。每次我向服务器发送get请求时,我都要等待60秒以上。
请求获取的超时是60秒,所以我总是得到504网关超时。我在puma配置中找不到更改请求超时的位置。如何将请求超时设置为超过60秒?
谢谢你,谢谢

tgabmvqs

tgabmvqs1#

  • 更新**:显然,worker_timeout不是答案,因为它涉及到整个进程挂起,而不仅仅是单个请求。所以这似乎是Puma不支持的东西,开发人员希望你用Puma前面的任何东西来实现它,比如Nginx。
  • ORIGINAL:Rails本身不会超时,但如果你运行Puma,请在config/puma.rb中使用worker_timeout。示例:*
  • worker_timeout(246060)if ENV 'RAILS_ENV']=='development'*

Source

b0zn9rqh

b0zn9rqh2#

这里的504错误是在Rails服务器前面的网关,例如它可能是Cloudflare或nginx等。
因此,设置将在那里。你必须在那里增加超时时间,在rails/puma中也是如此。

93ze6v8z

93ze6v8z3#

默认情况下,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)

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

ajsxfq5m

ajsxfq5m4#

最好是,你应该优化你的代码和查询,以便在更快的时间内响应,这样在生产环境中就不会有大流量进入你的应用程序的瓶颈。
如果你真的想增加响应时间,那么你可以使用机架超时来做到这一点:
https://github.com/kch/rack-timeout

相关问题