【问题标题】:Set read_timeout for the service call in Ruby Net::HTTP.start为 Ruby Net::HTTP.start 中的服务调用设置 read_timeout
【发布时间】:2013-02-15 22:38:48
【问题描述】:

我想在我的 ruby​​ 代码中覆盖服务调用的默认超时。 我打开连接如下。

res = Net::HTTP.start(@@task_url.host, @@task_url.port) do |http|
    http.get("/tasks/#{task_id}")
end          

我尝试如下设置 read_timeout 时间,但随后在我的代码中出现 NoMethodError 异常。

res = Net::HTTP.start(@@task_url.host, @@task_url.port)
res.read_timeout = 10
res do |http|
    http.get("/tasks/#{task_id}")
end

建议我应该如何设置 read_timeout。而且我希望在全局某处设置 read_timeout,以便我可以通过 Net::HTTPP.start() 将该超时用于我的所有服务调用

【问题讨论】:

标签: ruby-on-rails ruby


【解决方案1】:

如果你使用 Ruby 1.8,你必须使用 Net::HTTP.new:

http = Net::HTTP.new(host, port)
http.read_timeout = 10

response = http.get("/")    
# or intead of above line if you need block
# http.start do
#   response = http.get("/")
# end

如果您查看Net::HTTP.startsource code,您会发现::start 只是使用#start 方法调用::new

# File net/http.rb, line 439
def HTTP.start(address, port = nil, p_addr = nil, p_port = nil, p_user = nil, p_pass = nil, &block) # :yield: +http+
  new(address, port, p_addr, p_port, p_user, p_pass).start(&block)
end

>= Ruby 1.9

您可以在opt argument 中设置read_timeout: start(address, ..., opt, &block)

像这样:

res = Net::HTTP.start(host, port, :read_timeout => 10)

【讨论】:

  • 您可以在某处 (gist.github.com) 发布您正在尝试的代码吗?
  • 试试irb,如果可行就试试require "net/http"; res = Net::HTTP.start(your_host, your_port, :read_timeout => 10)
  • 实际上我认为签名也希望在方法中传递其他值。所以不会尝试通过将其他参数传递为 nul
  • 是的,可以尝试使用其他带有 nil 的参数,但这很奇怪,因为它对我有用,没有问题。
  • 在 irb 中运行给出相同的 TypeError cannot convert hash to string
【解决方案2】:

您可以使用来自OpenURIopen。这个方法有一个:read_timeout 选项。我不知道如何全局设置该选项,但您可以将其包装在设置此选项的自定义函数中。

require 'open-uri'
module NetCustom

  def open_url(url, &task)
     open(url, :read_timeout => 20) do |file|
       yield file.read
     end
  end

end

用法:

class Foo
  include NetCustom

  def bar
    open_url('http://example.org/tasks/') do |content|
      # Handle page text content
    end
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多