Rails 2.3.5,Ruby 1.8.7。
在prior question中,有许多以CSV格式导出数据的解决方案,但其中一些似乎在发送之前在内存中构建数据。导出大型数据集时这是明智的吗?先前问题中的任何解决方案都避免这种情况。
或者,如果不在内存或临时文件中本地构建整个响应,是否无法避免构建响应?
如果后者是真的,我不会感到惊讶,因为如果CSV生成中出现错误,您可能希望发回错误消息,但我可能会生成太多数据而无法生成内存/磁盘上的数据。
答案 0 :(得分:2)
您可以直接从CSV库流式传输(Ruby 1.8中的FasterCSV)。
render :text => proc { |response, output|
CSV.generate(output) do |csv|
csv << ...
end
}
如果您担心内存占用,也应该使用find_in_batches。