22

ファイルをディスクに書き込まずに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)

Reports.sendreport はファイルを添付してメールを送信するため、ファイルである必要があります...

4

4 に答える 4

21

を使用できますTempfileTempfileファイルをディスクに書き込むため、要求に適合しません。

しかし、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
于 2013-01-23T21:47:11.293 に答える
3

mmap gem の 1 つを試してください。ライブラリがファイル名のみを取る場合、それはあなたのオプションです。

ただし、ファイルのようなオブジェクトを受け入れることができる場合は、StringIO を使用できます。

何でも変更Reportsして、より汎用的にすることを検討するかもしれません。メール メッセージの作成に何を使用しているかによって異なります。これは些細なことかもしれません。

于 2013-01-23T21:12:56.973 に答える