From: "akr (Akira Tanaka)" Date: 2012-07-18T20:37:42+09:00 Subject: [ruby-dev:45973] [ruby-trunk - Bug #6751][Assigned] remove tempfiles early. Issue #6751 has been reported by akr (Akira Tanaka). ---------------------------------------- Bug #6751: remove tempfiles early. https://bugs.ruby-lang.org/issues/6751 Author: akr (Akira Tanaka) Status: Assigned Priority: Normal Assignee: xibbar (Takeyuki Fujioka) Category: lib Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-07-18 trunk 36442) [x86_64-linux] cgi.rb で、テンポラリファイル (Tempfile) をなるべく早く消すようにすると良いと 思うのですがいかがでしょうか。 いずれ GC で消されるはずなので、Bug というほどの話ではありませんが。 ./ruby test/runner.rb test/cgi の各テストでテンポラリファイルが残らないように したものを cgi-tempfile.patch として作ってみました。 * read_multipart で params に入れないものはそこで消す * read_multipart で例外が起きたら、内部で作ったものはすべて消す * テスト内で作ったものはテストが終わる前に消す なお、テスト毎に残っていないか確認するのは以下のようにして行いました。 Index: lib/minitest/unit.rb =================================================================== --- lib/minitest/unit.rb (revision 36442) +++ lib/minitest/unit.rb (working copy) @@ -1082,6 +1082,10 @@ module MiniTest end trap 'INFO', 'DEFAULT' if SUPPORTS_INFO_SIGNAL end + if !(live_tempfiles = ObjectSpace.each_object(Tempfile).find_all {|t| t.path }).empty? + puts nil, "after #{self.__name__}", *live_tempfiles.map {|t| t.inspect } + live_tempfiles.each {|t| t.unlink } + end result end どうでしょうか。 -- http://bugs.ruby-lang.org/