1

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 分など、自分の状況により適した値に設定できると思いますが、どのように、どこで?

4

1 に答える 1

3

open次の:read_timeoutオプションを使用して、呼び出しに秒単位でタイムアウトを追加できます。

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

すべてのオプションはここに文書化されています。

于 2013-07-28T12:48:41.817 に答える