J'ai cette déclaration:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Où
some_path = "somedir/some_subdir/some-file.html"
Ce que je veux, c'est que s'il n'y a pas de répertoire appelé somedir
ou some_subdir
ou les deux dans le chemin, je veux qu'il le crée automatiquement.
Comment puis je faire ça?
FileUtils.mkdir_p
(qui est la méthode dédiée à votre cas d'utilisation)FileUtils#mkdir_p
fonctionne même si la hiérarchie de répertoires existe déjà (elle ne fait simplement rien), donc cette solution peut être compressée dans ce can one-liner plus une instruction require:FileUtils.mkdir_p(File.dirname(some_path))
Pour ceux qui recherchent un moyen de créer un répertoire s'il n'existe pas , voici la solution simple:
Basé sur le commentaire d'Eureka .
la source
FileUtils.mkdir_p(File.dirname(some_path))
"la source
Sur la base des autres réponses, rien ne s'est passé (n'a pas fonctionné). Il n'y a eu aucune erreur et aucun répertoire n'a été créé.
Voici ce que je devais faire:
J'avais besoin de créer une variable pour attraper la réponse qui
FileUtils.mkdir_p('dir_name')
renvoie ... alors tout a fonctionné comme un charme!la source
response = FileUtils.mkdir_p('dir_name')
. Si je n'ai pas créé cette variable,FileUtils.mkdir_p('dir_name')
ne fonctionnait pas pour moi ... ou du moins c'est ce dont je me souviens qui s'est passé (cette réponse a plus d'un an). Je ne serais pas surpris si une version plus récente de Ruby résout ce problème.Que diriez-vous d'utiliser
Pathname
?la source
some_path.dirname.mkpath
au lieu desome_path.dirname.mkdir_p
mkpath
. De plus, si vous avez juste le répertoire et non le chemin, il n'y a pas besoin dedirname
, par exemple Pathname ("somedir / some_subdir"). Mkpath fonctionnera de la même manière.Dans le même esprit (et en fonction de votre structure), voici comment nous avons résolu où stocker les captures d'écran:
Dans notre configuration d'environnement (env.rb)
Et dans nos hooks.rb
la source
La seule solution de "bibliothèque principale" de la réponse supérieure était incomplète. Si vous souhaitez utiliser uniquement les bibliothèques principales, utilisez ce qui suit:
J'avais besoin de cette solution car le gemme de dépendance de FileUtils rmagick empêchait mon application Rails de se déployer sur Amazon Web Services car rmagick dépend du package libmagickwand-dev (Ubuntu) / imagemagick (OSX) pour fonctionner correctement.
la source