Ruby - 在内存中创建文件

hir*_*lau 18 ruby csv io

无论如何在Ruby中编写以下代码而不将文件写入磁盘?

temp_file = 'path/to/file.csv'
users = [a@b.c, c@b.a]

CSV.open(temp_file, "w") do |csv|
  csv << data_for_report
end

Reports.sendreport users temp_file

File.delete(temp_file)
Run Code Online (Sandbox Code Playgroud)

Reports.sendreport附加一个文件并发送一封电子邮件,因此它需要是一个文件......

knu*_*nut 18

你可以用Tempfile. Tempfile将文件写入光盘,因此它不适合您的请求.

但我认为Tempfile提供了您需要的一些功能:

当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
Run Code Online (Sandbox Code Playgroud)


Dav*_*ton 2

尝试使用 mmap gem 之一。如果库只采用文件名,那是您的选择。

但是,如果它可以接受类似文件的对象,则可以使用 StringIO。

您可能会考虑更改任何Reports内容,使其更加通用。这取决于它使用什么来创建邮件消息——这可能是微不足道的。