Ich habe diese Aussage:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Wo
some_path = "somedir/some_subdir/some-file.html"
Was ich tun möchte, ist, wenn es kein Verzeichnis mit dem Namen somedir
oder some_subdir
oder beides im Pfad gibt, möchte ich, dass es automatisch erstellt wird.
Wie kann ich das machen?
FileUtils.mkdir_p
(dies ist die Methode, die Ihrem Anwendungsfall gewidmet ist)FileUtils#mkdir_p
auch dann funktioniert, wenn die Verzeichnishierarchie bereits vorhanden ist (es wird einfach nichts unternommen), sodass diese Lösung in diesen Einzeiler mit einer erforderlichen Anweisung komprimiert werden kann:FileUtils.mkdir_p(File.dirname(some_path))
Für diejenigen, die nach einer Möglichkeit suchen , ein Verzeichnis zu erstellen, wenn es nicht vorhanden ist , ist hier die einfache Lösung:
Basierend auf Eurekas Kommentar .
quelle
FileUtils.mkdir_p(File.dirname(some_path))
"quelle
Basierend auf anderen Antworten ist nichts passiert (hat nicht funktioniert). Es gab keinen Fehler und es wurde kein Verzeichnis erstellt.
Folgendes musste ich tun:
Ich musste eine Variable erstellen, um die Antwort zu erfassen, die
FileUtils.mkdir_p('dir_name')
zurücksendet ... dann funktionierte alles wie ein Zauber!quelle
response = FileUtils.mkdir_p('dir_name')
. Wenn ich diese Variable nicht erstellt habe,FileUtils.mkdir_p('dir_name')
nicht für mich gearbeitet habe ... oder zumindest ist das, woran ich mich erinnere, passiert (diese Antwort ist älter als 1 Jahr). Es würde mich nicht wundern, wenn eine neuere Version von Ruby dieses Problem behebt.Wie wäre es mit
Pathname
?quelle
some_path.dirname.mkpath
anstelle vonsome_path.dirname.mkdir_p
mkpath
. Auch wenn Sie nur das Verzeichnis und nicht den Pfad haben, ist dies nicht erforderlichdirname
, z. B. Pfadname ("somedir / some_subdir"). Mkpath funktioniert auf die gleiche Weise.In ähnlicher Weise (und abhängig von Ihrer Struktur) haben wir auf diese Weise gelöst, wo Screenshots gespeichert werden sollen:
In unserem env-Setup (env.rb)
Und in unseren hooks.rb
quelle
Die einzige Lösung für die "Kernbibliothek" der Top-Antwort war unvollständig. Wenn Sie nur Kernbibliotheken verwenden möchten, verwenden Sie Folgendes:
Ich brauchte diese Lösung, weil das Abhängigkeitsjuwel von FileUtils, rmagick, die Bereitstellung meiner Rails-App auf Amazon Web Services verhinderte, da rmagick vom Paket libmagickwand-dev (Ubuntu) / imagemagick (OSX) abhängt, um ordnungsgemäß zu funktionieren.
quelle