早速だが、コードを見てほしい。ネットワークデータを一旦ローカルの一時ファイルに受け取り、後でゆっくり読み書きしよう、という意図のコードだ。呼び出し元はファイルハンドルを受けとり、シークを含めた読み書きができる、というか、したい。 def create_tempfile(*) network_source = ... # 省略 Tempfile.new("example").binmode.tap do |file| IO.copy_stream(network_source, file) file.rewind end end ところが、このコードには問題がある。普段何も問題なく動くのに、時折このメソッドから受け取るファイルに対して操作をしようとしたら IOError が発生することがある。しかもこのエラーは環境や時間、扱うデータによって発生したりしなかったりするし、スタックトレースはなに
![Ruby の Tempfile で発生した競合状態の原因を探る | Webシステム開発/教育ソリューションのタイムインターメディア](https://cdn-ak-scissors.b.st-hatena.com/image/square/0fe37dccafcaaf36ee873570475ff20bcee92aaa/height=288;version=1;width=512/https%3A%2F%2Fwww.timedia.co.jp%2Fwp-content%2Fuploads%2F2022%2F04%2F13362.png)