2011-04-11 29 views
2

Rails 2.3.5,Ruby 1.8.7。Rails導出爲CSV,而不在內存中構建CSV

prior question中,有許多以CSV格式導出數據的解決方案,但其中一些似乎在發送之前在內存中構建數據。導出大型數據集時,這是否明智?前面的問題中的任何解決方案都可以避免這種情況。

還是不可能避免建立一個響應,而不是在本地構建整個響應,無論是在內存中還是在臨時文件中?

如果後者是真的,我不會感到驚訝,因爲如果在CSV生成過程中出現錯誤,您可能希望返回錯誤消息,但我可能會生成太多的數據以生成想要生成的數據內存中/磁盤上的數據。

回答

2

您可以直接從CSV庫(Ruby 1.8中的FasterCSV)流式傳輸。

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

您還應該使用find_in_batches,如果你擔心自己的內存佔用。