Ruby超时在Rails中不起作用?

时间:2012-11-24 12:54:02

标签: ruby-on-rails ruby sockets

我在尝试通过TCPSocket连接到不可用的远程资源时遇到问题。它只是无限期地挂起而没有超时。理想情况下,我希望它每2分钟左右尝试重新连接,但TCPSocket.new调用似乎阻止了。我尝试过使用timeout()但是也没有做任何事情。在IRB实例中尝试相同的调用完全正常,但是当它在Rails中时,它会失败。任何人都可以解决这个问题吗?

我的代码如下所示:

def self.connect!
  @@connection = TCPSocket.new IP, 4449
end

def self.send(cmd)
puts "send  "
unless @@connection
  self.connect!
end

loop do
  begin
    @@connection.puts(cmd)
    return
  rescue IOError
    sleep(self.get_reconnect_delay)
    self.connect!
  end
end
end

1 个答案:

答案 0 :(得分:0)

不幸的是,目前无法直接在TCPSocket上设置超时。

有关功能请求,请参阅http://bugs.ruby-lang.org/issues/5101。您将使用基本的Socket类并设置套接字选项。