ruby-on-rails - 在 Ruby/Rails 中自定义 IO 流超时值

标签 ruby-on-rails ruby timeout

在我的 Rails 应用程序中,我使用 open-uri 打开一个可能需要 10 分钟加载的外部文件

例子:

dl_stream = open('http://wetten.overheid.nl/xml.php?regelingID=bwbr0020368')

现在,1 分钟后,Ruby 将抛出超时错误。我从 \net\protocol.rc 中的源代码中收集了这个:

@read_timeout = 60

def rbuf_fill
  begin
    @rbuf << @io.read_nonblock(BUFSIZE)
  rescue IO::WaitReadable
    if IO.select([@io], nil, nil, @read_timeout)
      retry
    else
      raise Timeout::Error
    end
  rescue IO::WaitWritable
    # OpenSSL::Buffering#read_nonblock may fail with IO::WaitWritable.
    # http://www.openssl.org/support/faq.html#PROG10
    if IO.select(nil, [@io], nil, @read_timeout)
      retry
    else
      raise Timeout::Error
    end
  end
end

我想我可以在我的应用程序设置中将此超时值设置为更适合我的情况的值,例如 15 分钟,但是如何以及在哪里?

最佳答案

您可以使用 :read_timeout 选项将超时(以秒为单位)添加到对 open 的调用中:

# timeout after 10 minutes
open('http://example.com', :read_timeout => 600).read

所有选项均已记录 here .

关于ruby-on-rails - 在 Ruby/Rails 中自定义 IO 流超时值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908277/

相关文章:

ruby-on-rails - bool 属性的命名约定

C++ 在时间后调用函数或取消

ruby - 在Ruby编程语言中,$:叫什么名字

ruby-on-rails - Capistrano 部署 :migrate and db:migrate run all migrations every time

ruby-on-rails - has_many :through with class_name and foreign_key

ruby-on-rails - Puma 和 Nginx 502 Bad Gateway 错误(Ubuntu 服务器 14.04)

ruby - 查找最接近数组平均值的元素

java - 95% 如何确定客户端上的默认超时设置?

java - RabbitMQ 中服务器端超时是多少?

ruby-on-rails - git status 显示将开发平台从 Windows 更改为 Linux 后修改的文件列表