gpt4 book ai didi

ruby-on-rails - 如何在可配置的超时时间内响应 Rails 请求

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:11 25 4
gpt4 key购买 nike

我想在不使用超时模块的情况下在 Controller 的操作中实现以下行为:

class AdminController < ApplicationController
def example
Timeout.timeout(params[:timeout].to_i) do
... # try to process the request within params[:timeout] seconds
end
rescue Timeout::Error
render nothing: true, status: :gateway_timeout
end
end

我想避免使用超时,因为它会在我的应用程序中导致许多错误,包括数据库连接泄漏。报告的其他一些问题: http://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/

最佳答案

不要为此使用 ruby 。问题是超时模块将在执行代码的任何地方中止代码,这将导致打开和悬空的套接字、连接和文件或更糟。 (我想,如果你启动外部脚本或为每项工作支付费用,这并不是真正的问题,但在那些情况下,只需使用 unix/linux 本地 io 超时)

这就是为什么 ruby​​ CI 服务器从未起飞的原因(Jenkins 是 java)。我会用一个单独的服务来设计它,该服务可以处理运行中的作业,您可以使用 API ping;然后,在您看来,每隔几秒 ping 一次,以便他们可以看到持续的更新。在这种情况下,Rails 应用程序不需要在其中包含任何污染超时代码。

编辑:由于您在该 block 中执行 HTTP 请求,只需使用 http 库中内置的超时设置(例如 https://github.com/lostisland/faraday)

关于ruby-on-rails - 如何在可配置的超时时间内响应 Rails 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33193284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com