Mam to oświadczenie:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Gdzie
some_path = "somedir/some_subdir/some-file.html"
Co chcę się zdarzyć, jeśli nie istnieje katalog o nazwie somedir
lub some_subdir
czy zarówno w ścieżce, chcę go automagicznie go utworzyć.
Jak mogę to zrobić?
FileUtils.mkdir_p
(co jest metodą dedykowaną dla twojego przypadku użycia)FileUtils#mkdir_p
działa, nawet jeśli hierarchia katalogów już istnieje (po prostu nic nie robi), więc to rozwiązanie można skompresować do tego można w jednym linijce plus wymaganie:FileUtils.mkdir_p(File.dirname(some_path))
Dla tych, którzy szukają sposobu na utworzenie katalogu, jeśli nie istnieje , oto proste rozwiązanie:
Na podstawie komentarza Eureki .
źródło
FileUtils.mkdir_p(File.dirname(some_path))
źródło
Na podstawie odpowiedzi innych osób nic się nie stało (nie zadziałało). Nie było błędu i nie utworzono katalogu.
Oto, co musiałem zrobić:
Musiałem stworzyć zmienną, aby złapać odpowiedź, która
FileUtils.mkdir_p('dir_name')
odsyła ... wtedy wszystko działało jak urok!źródło
response = FileUtils.mkdir_p('dir_name')
. Gdybym nie utworzył tej zmiennej,FileUtils.mkdir_p('dir_name')
nie działałby dla mnie ... a przynajmniej tak się stało (ta odpowiedź ma więcej niż 1 rok). Nie zdziwiłbym się, gdyby nowsza wersja Rubiego rozwiązała ten problem.A co powiesz na używanie
Pathname
?źródło
some_path.dirname.mkpath
zamiastsome_path.dirname.mkdir_p
mkpath
. Również jeśli masz tylko katalog, a nie ścieżkę, nie ma potrzeby, abydirname
np. Ścieżka („katalog / jakiś_podkatalog”). Mkpath będzie działać w ten sam sposób.W podobny sposób (iw zależności od struktury) rozwiązaliśmy, gdzie przechowywać zrzuty ekranu:
W naszej konfiguracji środowiska (env.rb)
A w naszym hooks.rb
źródło
Jedyne rozwiązanie dotyczące „biblioteki podstawowej” w pierwszej odpowiedzi było niekompletne. Jeśli chcesz używać tylko podstawowych bibliotek, użyj następujących:
Potrzebowałem tego rozwiązania, ponieważ rmagick zależności FileUtils uniemożliwił wdrożenie mojej aplikacji Rails w Amazon Web Services, ponieważ rmagick zależy od pakietu libmagickwand-dev (Ubuntu) / imagemagick (OSX), aby działał poprawnie.
źródło