[RUBY] N'oubliez pas de fermer le fichier simplement parce qu'il se trouve dans un dossier temporaire

Conclusion

Même si vous supprimez le dossier temporaire, le fichier ne sera pas complètement supprimé et il exercera une pression sur le disque dur, alors fermons-le correctement

Introduction: dossier temporaire

Dans Ruby, vous pouvez facilement créer un dossier temporaire et le dossier disparaît lorsque le bloc se termine, il est donc facile à gérer en tant que dossier de travail.

Dir.mktmpdir('test') do |dir|
  #Créer et ouvrir des fichiers
end

Échec: ouvrir (ne pas fermer) le fichier

Si vous oubliez de le fermer simplement en l'ouvrant car il disparaît de toute façon dans le dossier temporaire ...

Dir.mktmpdir('test') do |dir|
  #Processus de génération de fichiers
  f = File.open(path)
  #travail
end

Problème: le fichier ne disparaît pas

Le dossier tmp est vide, mais le disque dur est de plus en plus compressé ... Oui, avec Linux, tant que le processus reste, il n'est pas complètement terminé. À moins que vous ne redémarriez le serveur Rails ou Delayed Job Woker et que vous n'abandonniez le processus qui gère le problème, il restera.

$ lsof | grep delete
bundle 23931 (Abréviation) /tmp/test20200317-23931-cayd6g/test.pdf (deleted)

*) Dans l'exemple ci-dessus, le processus 23931 est en train de saisir, il est donc temporairement supprimé.

Action: Fermer

Puisque le fichier est libéré, il sera définitivement supprimé lorsque le dossier temporaire sera supprimé. Si vous faites cela, vous n'avez pas à abandonner tout le processus

Dir.mktmpdir('test') do |dir|
  #Processus de génération de fichiers
  File.open(path) do
    #travail
  end
end

référence

Recommended Posts

N'oubliez pas de fermer le fichier simplement parce qu'il se trouve dans un dossier temporaire
Obtenir le nom de fichier dans un dossier à l'aide de glob
Exporter la liste de clés incluse dans S3 Bucket dans un fichier
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Créez une commande pour supprimer tous les fichiers temporaires générés dans un dossier spécifique
Un script shell pour se souvenir à nouveau du shell pipenv
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
[Python] Récupérez les fichiers dans le dossier avec Python
Comment obtenir les fichiers dans le dossier [Python]
Enregistrer l'objet dans un fichier avec pickle
Comment lire des fichiers dans différents répertoires
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
Comment afficher la date de modification d'un fichier en langage C jusqu'à nanosecondes
Un mémorandum pour exécuter un script python dans un fichier bat
Je veux échantillonner au hasard un fichier avec Python
Sortie d'un vidage binaire en binaire et retour dans un fichier binaire
2 façons de lire tous les fichiers csv dans un dossier
Erreur de rsync dans le dossier partagé mount.cifs: le fichier existe (17)
Obtenez de manière récursive la liste Excel dans un dossier spécifique avec python et écrivez-la dans Excel.
[Sublime Text 2] Toujours exécuter un fichier spécifique dans le projet
Enregistrez le modèle pystan et les résultats dans un fichier pickle
Un mémorandum pour enregistrer la bibliothèque écrit en Hy dans PyPI
[Python] Ouvrez le fichier csv dans le dossier spécifié par pandas
[python] Remplacez le nom du fichier image par un numéro de série
Il est difficile d'écrire un algorithme très simple en php
Comment utiliser la méthode __call__ dans la classe Python
Comment importer des fichiers où vous le souhaitez en Python
Traitez les fichiers du dossier dans l'ordre avec le script shell
Comment générer une requête à l'aide de l'opérateur IN dans Django
[Note] Importation de fichiers dans le répertoire parent en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Conversion par lots de tous les fichiers xlsx du dossier en fichiers CSV
Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
Essayez simplement de recevoir un webhook avec ngrok et Python