У меня есть такое заявление:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
куда
some_path = "somedir/some_subdir/some-file.html"
Я хочу, чтобы произошло следующее: если в пути нет каталога с именем somedir
или some_subdir
или того и другого, я хочу, чтобы он автоматически создавал его.
Как я могу это сделать?
FileUtils.mkdir_p
виду , что оно по сути является повторной реализацией (это метод, предназначенный для вашего варианта использования)FileUtils#mkdir_p
работает, даже если иерархия каталогов уже существует (она просто ничего не делает), поэтому это решение можно сжать в однострочную банку с оператором require:FileUtils.mkdir_p(File.dirname(some_path))
Для тех, кто ищет способ создать каталог, если он не существует , вот простое решение:
На основании комментария Эврики .
источник
FileUtils.mkdir_p(File.dirname(some_path))
»источник
Судя по другим ответам, ничего не произошло (не сработало). Ошибки не было, и каталог не был создан.
Вот что мне нужно было сделать:
Мне нужно было создать переменную, чтобы поймать ответ, который
FileUtils.mkdir_p('dir_name')
отправляется обратно ... тогда все работало как шарм!источник
response = FileUtils.mkdir_p('dir_name')
. Если бы я не создавал эту переменную,FileUtils.mkdir_p('dir_name')
у меня не работало ... или, по крайней мере, то, что я помню, произошло (этому ответу больше года). Я не удивлюсь, если новая версия Ruby исправит эту проблему.Как насчет использования
Pathname
?источник
some_path.dirname.mkpath
вместоsome_path.dirname.mkdir_p
mkpath
. Также, если у вас есть только каталог, а не путь, нет необходимостиdirname
, например, Pathname ("somedir / some_subdir"). Mkpath будет работать таким же образом.Аналогичным образом (и в зависимости от вашей структуры) мы решили, где хранить скриншоты:
В нашей настройке env (env.rb)
И в нашем hooks.rb
источник
Единственное решение «основной библиотеки» в верхнем ответе было неполным. Если вы хотите использовать только основные библиотеки, используйте следующее:
Мне было нужно это решение, потому что gem rmagick зависимостей FileUtils не позволил моему приложению Rails развернуться на Amazon Web Services, поскольку rmagick зависит от пакета libmagickwand-dev (Ubuntu) / imagemagick (OSX) для правильной работы.
источник