Selbst wenn Sie den temporären Ordner löschen, wird die Datei nicht vollständig gelöscht und es wird Druck auf die Festplatte ausgeübt. Schließen Sie sie also ordnungsgemäß
In Ruby können Sie problemlos einen temporären Ordner erstellen. Der Ordner verschwindet, wenn der Block endet, sodass er problemlos als Arbeitsordner verwendet werden kann.
Dir.mktmpdir('test') do |dir|
#Dateien erstellen und öffnen
end
Wenn Sie vergessen, es zu schließen, indem Sie es öffnen, weil es ohnehin im temporären Ordner verschwindet ....
Dir.mktmpdir('test') do |dir|
#Dateierzeugungsprozess
f = File.open(path)
#Arbeit
end
Der tmp-Ordner ist leer, aber die Festplatte wird immer mehr komprimiert ... Ja, unter Linux ist der Prozess noch nicht vollständig abgeschlossen, solange er noch besteht. Sofern Sie den Rails-Server oder den Delayed Job Woker nicht neu starten und den Prozess, der das Problem behandelt, löschen, bleibt er weiterhin bestehen.
$ lsof | grep delete
bundle 23931 (Abkürzung) /tmp/test20200317-23931-cayd6g/test.pdf (deleted)
*) Im obigen Beispiel wird der Prozess 23931 erfasst, sodass er vorübergehend gelöscht wird.
Da die Datei freigegeben wird, wird sie dauerhaft gelöscht, wenn der temporäre Ordner gelöscht wird. Wenn Sie dies tun, müssen Sie nicht den gesamten Prozess fallen lassen
Dir.mktmpdir('test') do |dir|
#Dateierzeugungsprozess
File.open(path) do
#Arbeit
end
end
Recommended Posts