mayusculas - require en ruby
¿Cómo creo un directorio si no existe ninguno usando la clase File en Ruby? (7)
¿Qué hay de usar Pathname
?
require ''pathname''
some_path = Pathname("somedir/some_subdir/some-file.html")
some_path.dirname.mkdir_p
some_path.write(builder.to_html)
Tengo esta declaració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 que si no hay un directorio llamado somedir
o some_subdir
o ambos en la ruta, quiero que lo cree automágicamente.
¿Cómo puedo hacer eso?
A lo largo de 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)
screenshotfolder = "./screenshots/#{Time.new.strftime("%Y%m%d%H%M%S")}"
unless File.directory?(screenshotfolder)
FileUtils.mkdir_p(screenshotfolder)
end
Before do
@screenshotfolder = screenshotfolder
...
end
Y en nuestro hooks.rb
screenshotName = "#{@screenshotfolder}/failed-#{scenario_object.title.gsub(//s+/,"_")}-#{Time.new.strftime("%Y%m%d%H%M%S")}_screenshot.png";
@browser.take_screenshot(screenshotName) if scenario.failed?
embed(screenshotName, "image/png", "SCREENSHOT") if scenario.failed?
La solución de la "biblioteca principal" de la respuesta superior estaba incompleta. Si solo desea utilizar bibliotecas principales, use lo siguiente:
target_dir = ""
Dir.glob("/#{File.join("**", "path/to/parent_of_some_dir")}") do |folder|
target_dir = "#{File.expand_path(folder)}/somedir/some_subdir/"
end
# Splits name into pieces
tokens = target_dir.split(////)
# Start at ''/''
new_dir = ''/''
# Iterate over array of directory names
1.upto(tokens.size - 1) do |n|
# Builds directory path one folder at a time from top to bottom
unless n == (tokens.size - 1)
new_dir << "#{tokens[n].to_s}/" # All folders except innermost folder
else
new_dir << "#{tokens[n].to_s}" # Innermost folder
end
# Creates directory as long as it doesn''t already exist
Dir.mkdir(new_dir) unless Dir.exist?(new_dir)
end
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.
Para aquellos que buscan una manera de crear un directorio si no existe , aquí está la solución simple:
require ''fileutils''
FileUtils.mkdir_p ''dir_name''
Basado en el comment de Eureka.
Puede usar FileUtils para crear recursivamente directorios principales, si aún no están presentes:
require ''fileutils''
dirname = File.dirname(some_path)
unless File.directory?(dirname)
FileUtils.mkdir_p(dirname)
end
Editar: Aquí hay una solución que usa solo las bibliotecas principales (se vuelve a implementar la rueda, no se recomienda)
dirname = File.dirname(some_path)
tokens = dirname.split(/[////]/) # don''t forget the backslash for Windows! And to escape both "/" and "/"
1.upto(tokens.size) do |n|
dir = tokens[0...n]
Dir.mkdir(dir) unless Dir.exist?(dir)
end
Según las respuestas de otros, no pasó nada (no funcionó). No hubo error y no se creó ningún directorio.
Esto es lo que necesitaba hacer:
require ''fileutils''
response = FileUtils.mkdir_p(''dir_name'')
Necesitaba crear una variable para captar la respuesta que FileUtils.mkdir_p(''dir_name'')
envía de vuelta ... ¡entonces todo funcionó como un amuleto!
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)