Ответ 1
Попробуйте что-то вроде этого.
dir = File.dirname("#{Rails.root}/log/#{today}/my.log")
FileUtils.mkdir_p(dir) unless File.directory?(dir)
@@my_logger ||= Logger.new("#{Rails.root}/log/#{today}/my.log")
Я пытаюсь зарегистрировать новый журнал
@@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
но когда я пытаюсь создать новые папки, поставьте его внутри
@@my_logger ||= Logger.new("#{Rails.root}/log/today.to_s/my.log")
он возвращает Errno::ENOENT: No such file or directory
Возможно, это проблема разрешения? Как создать папку (если нет) с помощью Logger.new?
Попробуйте что-то вроде этого.
dir = File.dirname("#{Rails.root}/log/#{today}/my.log")
FileUtils.mkdir_p(dir) unless File.directory?(dir)
@@my_logger ||= Logger.new("#{Rails.root}/log/#{today}/my.log")
Вы также можете сделать это
directory_name = "name"
Dir.mkdir(directory_name) unless File.exists?(directory_name)
Автоматическое создание каталогов журналов устарело в рельсах. Здесь фрагмент кода из кода Logger.new:
ActiveSupport::Deprecation.warn("Automatic directory creation for '#{log}' is deprecated. Please make sure the directory for your log file exists before creating the logger. ")
Принятая практика заключается в том, чтобы убедиться, что файл журнала (и каталог) существует до создания регистратора.
Чтобы убедиться, что каталог существует раньше времени, возможно, используйте код, похожий на этот:
log_file_name = '/path/to/my.log'
unless File.exist?(File.dirname(log_file_name))
FileUtils.mkdir_p(File.dirname(log_file_name))
end