Zipped Tempfile只发送一半的时间 - 使用Rubyzip

时间:2016-01-15 02:07:27

标签: temporary-files prawn rubyzip

以下代码旨在汇总少量PDF文档,并发送包含所有PDF文件的zip文件。该代码有效,但只有50%的时间。

def donor_reports
@starting_date = params['date'].to_date
@ending_date = @starting_date.to_date.end_of_month
@categories = Category.all
zipfile_name = Tempfile.new(['records', '.zip'])
Zip::File.open(zipfile_name.path, Zip::File::CREATE) do |zipfile|
  @categories.each do |category|
    temp_pdf = Tempfile.new(['record', '.pdf'])
    temp_pdf.binmode
    temp_prawn_pdf = CategoryReport.new
    temp_prawn_pdf.generate_report(category, @starting_date, @ending_date)
    temp_pdf.write temp_prawn_pdf.render
    temp_pdf.rewind
    zipfile.add("#{category.name} - Donation Report.pdf", "#{temp_pdf.path}")
  end
end
send_file zipfile_name
end

其他50%的时间会抛出以下错误 -

   No such file or directory @ rb_sysopen - /var/folders/jy/w7tv9n8n7tqgtgmv49qz7zqh0000gn/T/record20160114-10768-1guyoar.pdf

这里的任何建议/指导将不胜感激!第一次使用Tempfile和Rubyzip。

1 个答案:

答案 0 :(得分:0)

这可能是因为在zipfile块结束时,zip gem实际引用之前,内部Tempfile会被磁盘收集并从磁盘中删除(有时)。我只是将它们推入一个数组来解决它: ```

temp_files = []
Zip::File.open(temp_file.path, Zip::File::CREATE) do |zip|
    @categories.each do |category|
        temp_pdf = Tempfile.new(['record', '.pdf'])
        #...
        temp_files << temp_pdf
    end
end

```