简体   繁体   中英

Ruby timeout does not work in Rails?

I'm having an issue trying to get a timeout when connecting via TCPSocket to a remote resource that isn't available. It just hangs indefinitely without timing out. Ideally I'd want it to try reconnect every 2 minutes or so, but the TCPSocket.new call seems to block. I've tried using timeout() but that doesn't do anything either. Trying the same call in an IRB instance works perfectly fine, but when it's in Rails, it fails. Anyone have a work around for this?

My code looks something as follows:

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

Unfortunately, there is currently no way to set timeouts on TCPSocket directly.

See http://bugs.ruby-lang.org/issues/5101 for the feature request. You will have use the basic Socket class and set socket options.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM