Tengo esta afirmación:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Dónde
some_path = "somedir/some_subdir/some-file.html"
Lo que quiero que suceda es, si no hay un directorio llamado somedir
o some_subdir
o ambos en el camino, yo quiero que crean que automágicamente.
¿Cómo puedo hacer eso?
FileUtils.mkdir_p
(que es el método dedicado a su caso de uso)FileUtils#mkdir_p
funciona incluso si la jerarquía de directorios ya existe (simplemente no hace nada), por lo que esta solución se puede comprimir en esta línea única más una declaración de requerimiento:FileUtils.mkdir_p(File.dirname(some_path))
Para aquellos que buscan una manera de crear un directorio si no existe , aquí está la solución simple:
Basado en el comentario de Eureka .
fuente
FileUtils.mkdir_p(File.dirname(some_path))
"fuente
Según las respuestas de los demás, no pasó nada (no funcionó). No hubo error y no se creó ningún directorio.
Esto es lo que necesitaba hacer:
Necesitaba crear una variable para captar la respuesta que
FileUtils.mkdir_p('dir_name')
envía de vuelta ... ¡entonces todo funcionó de maravilla!fuente
response = FileUtils.mkdir_p('dir_name')
. Si no creé esta variable,FileUtils.mkdir_p('dir_name')
no estaba funcionando para mí ... o al menos eso es lo que recuerdo que sucedió (esta respuesta tiene más de 1 año). No me sorprendería si una versión más nueva de Ruby corrige este problema.¿Qué tal el uso
Pathname
?fuente
some_path.dirname.mkpath
lugar desome_path.dirname.mkdir_p
mkpath
. Además, si solo tiene el directorio y no la ruta, no es necesariodirname
, por ejemplo, Nombre de ruta ("somedir / some_subdir"). Mkpath funcionará de la misma manera.En líneas similares (y dependiendo de su estructura), así es como resolvimos dónde almacenar capturas de pantalla:
En nuestra configuración env (env.rb)
Y en nuestros hooks.rb
fuente
La única solución de la "biblioteca principal" de la respuesta superior estaba incompleta. Si solo desea usar bibliotecas principales, use lo siguiente:
Necesitaba esta solución porque la gema de dependencia de FileUtils, rmagick, impidió que mi aplicación Rails se implementara en Amazon Web Services, ya que rmagick depende del paquete libmagickwand-dev (Ubuntu) / imagemagick (OSX) para funcionar correctamente.
fuente