1

サーバーから非常に大きな XML ファイル (1 - 5MB) を要求する必要がある Ruby 1.8.7 スクリプトを作成していますが、これは非常に低速です (1MB で 1 分 30 秒)。要求されたファイルがディスクに書き込まれます。

時間がかかりすぎる場合に先に進むのではなく、本当にファイルを取得したいので、スクリプトのタイムアウトをばかげた秒数に設定しました。まだ秒数が多いので、タイムアウトが発生し続けます。

これに対するベストプラクティスはありますか?

今私が使っている

  open(DIR + "" + number + "" + ".xml", 'wb') do |file|
  begin
    status = Timeout::timeout(6000000) do
      file << open(url).read
      end
    rescue Timeout::Error => e
      Rails.logger.info "Timeout for:" + number.to_s
    end
  end

現在、タイムアウトは秒単位で設定されているため、 1分30秒6000000以上になりますが、どういうわけかタイムアウトを秒単位で使用していません。私はRuby 1.8.7の使用に制限されていることにもう一度注意してください

4

1 に答える 1

4

残念ながら、これには問題があります。Ruby 1.9.x では、open-uri-extendedopenread_timeoutパラメーターを受け取ることができ、それは http ライブラリーに渡されます。しかし、あなたが使用している Ruby 1.8.x では、このパラメーターは使用できません。

したがって、net/http を直接使用し、start/get there を呼び出して、好みに合わせて read_timeout を設定する必要があります。open-uri ラッパーを使用するだけの場合、read_timeout は 60 秒のままであり、これは必要な値よりも短くなります。

于 2011-10-04T03:51:25.527 に答える