結論
一時フォルダを消してもそのファイルが完全に消えずハードディスクを圧迫して困ります、ちゃんと閉じましょう
紹介: 一時フォルダ
Rubyでは簡単に一時フォルダが作れてブロックが終わるとフォルダが消えてくれるので作業フォルダとして扱いやすいです
Dir.mktmpdir('test') do |dir|
# ファイル作ったり開いたり
end
失敗: ファイルを開く(閉じない)
どうせ一時フォルダで消えるのだからと Open して使うだけで閉じるのを忘れていると....
Dir.mktmpdir('test') do |dir|
# ファイル生成処理
f = File.open(path)
# 作業
end
問題: ファイルが消えない
tmp フォルダは空っぽなのにハードディスクがどんどん圧迫されていく...
そう Linux だとプロセスが残る限り完全に消えていないのです
Rails server や Delayed Job Woker の再起動などを行い問題の処理のあるプロセスごと一旦落とさない限り残り続けてしまいます
$ lsof | grep delete
bundle 23931 (略) /tmp/test20200317-23931-cayd6g/test.pdf (deleted)
※)上記例では プロセス 23931 が掴んでいるため仮削除状態
対処: 閉じましょう
ファイルが開放されるので一時フォルダの削除とともに完全に削除されます
これを行っていればプロセスごと落とす必要はありません
Dir.mktmpdir('test') do |dir|
# ファイル生成処理
File.open(path) do
# 作業
end
end