Saya memiliki pernyataan ini:
File.open(some_path, 'w+') { |f| f.write(builder.to_html) }
Dimana
some_path = "somedir/some_subdir/some-file.html"
Apa yang saya inginkan terjadi adalah, jika tidak ada direktori yang dipanggil somedir
atau some_subdir
atau keduanya di jalur, saya ingin membuatnya secara otomatis.
Bagaimana saya bisa melakukan itu?
FileUtils.mkdir_p
(yang merupakan metode yang didedikasikan untuk kasus penggunaan Anda)FileUtils#mkdir_p
berfungsi bahkan jika hierarki direktori sudah ada (itu tidak melakukan apa-apa) sehingga solusi ini dapat dikompresi menjadi satu baris ini ditambah pernyataan yang diperlukan:FileUtils.mkdir_p(File.dirname(some_path))
Bagi mereka yang mencari cara untuk membuat direktori jika tidak ada , inilah solusi sederhananya:
Berdasarkan komentar Eureka .
sumber
FileUtils.mkdir_p(File.dirname(some_path))
"sumber
Berdasarkan jawaban orang lain, tidak ada yang terjadi (tidak berhasil). Tidak ada kesalahan, dan tidak ada direktori yang dibuat.
Inilah yang perlu saya lakukan:
Saya perlu membuat variabel untuk menangkap respons yang
FileUtils.mkdir_p('dir_name')
dikirim kembali ... lalu semuanya bekerja seperti pesona!sumber
response = FileUtils.mkdir_p('dir_name')
. Jika saya tidak membuat variabel ini,FileUtils.mkdir_p('dir_name')
tidak berfungsi untuk saya ... atau setidaknya itulah yang saya ingat terjadi (jawaban ini berumur lebih dari 1 tahun). Saya tidak akan terkejut jika versi Ruby yang lebih baru memperbaiki masalah ini.Bagaimana kalau menggunakan
Pathname
?sumber
some_path.dirname.mkpath
alih - alihsome_path.dirname.mkdir_p
mkpath
. Juga jika Anda hanya memiliki direktori dan bukan path, tidak perludirname
, misalnya Pathname ("somedir / some_subdir"). Mkpath akan bekerja dengan cara yang sama.Sepanjang garis yang sama (dan tergantung pada struktur Anda), berikut adalah cara kami menyelesaikan tempat menyimpan tangkapan layar:
Dalam pengaturan env kami (env.rb)
Dan di hooks.rb kami
sumber
Solusi satu-satunya "pustaka inti" dari jawaban teratas tidak lengkap. Jika Anda hanya ingin menggunakan pustaka inti, gunakan yang berikut ini:
Saya membutuhkan solusi ini karena permata ketergantungan FileUtils 'rmagick mencegah aplikasi Rails saya diterapkan di Amazon Web Services karena rmagick bergantung pada paket libmagickwand-dev (Ubuntu) / imagemagick (OSX) untuk bekerja dengan benar.
sumber