Eu tenho esta afirmação:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Onde
some_path = "somedir/some_subdir/some-file.html"
O que eu quero acontecer é, se não houver diretório chamado somedir
ou some_subdir
ou ambos no caminho, eu quero que criá-lo automagicamente.
Como eu posso fazer isso?
FileUtils.mkdir_p
(que é o método dedicado ao seu caso de uso)FileUtils#mkdir_p
funciona mesmo que a hierarquia de diretórios já exista (ela simplesmente não faz nada); portanto, esta solução pode ser compactada neste one-liner da lata, além de uma instrução de exigência:FileUtils.mkdir_p(File.dirname(some_path))
Para quem procura uma maneira de criar um diretório, se ele não existir , aqui está a solução simples:
Baseado no comentário de Eureka .
fonte
FileUtils.mkdir_p(File.dirname(some_path))
"fonte
Com base nas respostas dos outros, nada aconteceu (não funcionou). Não houve erro e nenhum diretório criado.
Aqui está o que eu precisava fazer:
Eu precisava criar uma variável para pegar a resposta que
FileUtils.mkdir_p('dir_name')
envia de volta ... então tudo funcionou como um encanto!fonte
response = FileUtils.mkdir_p('dir_name')
. Se eu não criei essa variável,FileUtils.mkdir_p('dir_name')
não estava funcionando para mim ... ou pelo menos é o que eu lembro que aconteceu (esta resposta tem mais de um ano). Não ficaria surpreso se uma versão mais recente do Ruby resolver esse problema.Que tal usar
Pathname
?fonte
some_path.dirname.mkpath
vez desome_path.dirname.mkdir_p
mkpath
. Além disso, se você tiver apenas o diretório e não o caminho, não há necessidadedirname
, por exemplo, Nome do caminho ("somedir / some_subdir"). Mkpath funcionará da mesma maneira.Seguindo linhas semelhantes (e dependendo da sua estrutura), é assim que resolvemos onde armazenar as capturas de tela:
Em nossa configuração de env (env.rb)
E nos nossos hooks.rb
fonte
A única solução da "biblioteca principal" da resposta principal estava incompleta. Se você deseja usar apenas as bibliotecas principais, use o seguinte:
Eu precisava dessa solução porque o gemmag de dependência do FileUtils impediu que meu aplicativo Rails fosse implantado no Amazon Web Services, pois o rmagick depende do pacote libmagickwand-dev (Ubuntu) / imagemagick (OSX) para funcionar corretamente.
fonte