我正在txt
使用carrierwave
. 文件不小(80 MB - 500 MB),我想删除一些行以减小此大小(将减小大约 80% 的文件大小)。
我创建了一个模型方法来清除这些行:
require 'fileutils'
def clear_unnecessary_lines
old_file_path = Rails.root.join('public').to_s + log_file.to_s
new_file_path = old_file_path.sub! '.txt', '_temp.txt'
File.open(old_file_path, 'r') do |old_file|
File.open(new_file_path, 'w') do |new_file|
old_file.each_line do |line|
new_file.write(line) unless line.grep(/test/).size > 0
end
end
end
FileUtils.mv new_file_path, old_file_path
end
但是当我尝试open
新文件说没有这样的文件时出现错误。正如我读过的那样,使用该选项打开文件w
应该创建一个空文件进行写入。那为什么我会收到这样的错误?
另外,由于log_file
column 保存了原始文件的路径,并且我正在更改它,你能告诉如何用旧名称重命名新文件吗?正如我检查过的,我应该只指定old
和new
名称,而不是路径。
Errno::ENOENT: No such file or directory - /home/gotqn/Rails/LogFilesAnalyser/LogFilesAnalyser/public/uploads/log_file/log_file/3/log_debug_temp.txt
奇怪的是,如果我在 rails 控制台中执行以下命令,它不会引发错误并且文件已创建。
File.open('/home/gotqn/Rails/LogFilesAnalyser/LogFilesAnalyser/public/uploads/log_file/log_file/3/log_debug_temp.txt','w')