Tempfileでうっかり

プログラムの修正をしていると、テンポラリファイルで更新した内容が最終的なターゲットファイルに反映されない問題が発生した。単純化すると、下みたいなコードを書いていた。

require 'tempfile'
require 'fileutils'

tmpfile = Tempfile.new("test")
tmpfile.write "test string"
FileUtils.cp(tmpfile.path, "./newfile")

そう、問題はたんにファイルクロースしていないからだ。

tmpfile.close

をcpの前に実行すれば良いだけだった。