Rails导出为CSV而不在内存中构建CSV

时间:2011-04-11 20:44:22

标签: ruby-on-rails csv

Rails 2.3.5,Ruby 1.8.7。

prior question中,有许多以CSV格式导出数据的解决方案,但其中一些似乎在发送之前在内存中构建数据。导出大型数据集时这是明智的吗?先前问题中的任何解决方案都避免这种情况。

或者,如果不在内存或临时文件中本地构建整个响应,是否无法避免构建响应?

如果后者是真的,我不会感到惊讶,因为如果CSV生成中出现错误,您可能希望发回错误消息,但我可能会生成太多数据而无法生成内存/磁盘上的数据。

1 个答案:

答案 0 :(得分:2)

您可以直接从CSV库流式传输(Ruby 1.8中的FasterCSV)。

render :text => proc { |response, output|
    CSV.generate(output) do |csv|
      csv << ...
    end
}

如果您担心内存占用,也应该使用find_in_batches