Ruby – 在内存中创建文件
无论如何在Ruby中编写以下代码而不将文件写入磁盘?
temp_file = 'path/to/file.csv' users = [a@bc, c@ba] CSV.open(temp_file, "w") do |csv| csv << data_for_report end Reports.sendreport users temp_file File.delete(temp_file)
Reports.sendreport附加一个文件并发送一封电子邮件,因此它需要是一个文件……
试试其中一个mmapgem。 如果库只采用文件名,那么这是你的选择。
但是,如果它可以接受类文件对象,则可以使用StringIO。
您可以考虑更改Reports
内容,使其更具通用性。 这取决于它用于创建邮件消息的内容 – 这可能是微不足道的。
你可以使用Tempfile
。 Tempfile
将文件写入光盘,因此它不适合您的请求。
但我认为Tempfile提供了您需要的一些function:
当Tempfile对象被垃圾收集时,或者当Ruby解释器退出时,其关联的临时文件将被自动删除。
例:
require 'tempfile' require 'csv' data_for_report = [1,2,3,4] temp_file = Tempfile.new('foo') CSV.open(temp_file, "w") do |csv| csv << data_for_report end