2012-01-09 60 views
3

我们允许用户以CSV格式下载所有数据,但我们发现对于很多用户(拥有大量数据),我们确实需要在后台生成CSV文件,然后为他们提供一个链接稍后下载。如何在后台任务中生成CSV文件?

我知道如何在视图中动态生成一个CSV文件,但我不完全清楚在后台任务中生成它的最佳方式。

我目前使用csv_builder生成视图中的CSV文件...所以它会是真棒能够仍然使用,只是不知何故输出直接进入一个CSV文件,我可以再上传到S3

使用回形针......但这可能太牵强。

+0

backgroundrb应该帮助你。他们已经描述了如何在后台执行某些任务的步骤。您可以使用cron将它自动运行,以便在需要时(在可以生成它的视图中使用它之前)运行它。 – 2012-01-09 12:37:57

+0

我知道如何运行后台任务。我在问如何使用后台任务生成CSV文件,以及是否可以继续使用'csv_builder' – Shpigford 2012-01-09 12:52:31

回答

5

我有一个类似的问题,但使用内置的rails CSV库而不是csv_builder(我一无所知)。

在我的模型

我有生成CSV和节约S3作为paerclip附件的方法:

def csv_export 
    @entries = self.entries  
    @filename = "naming my file"  
    CSV.open("#{Rails.root.to_s}/tmp/#{@filename}", "wb") do |csv| #creates a tempfile csv 
    csv << ["Date & Time", "Name", "Email"] #creates the header 
    @entries.each do |e|    
     csv << [e.created_at, e.name, e.email] #create new line for each item in collection 
    end 
end 

self.update_attribute(:csv_report, File.open("#{Rails.root.to_s}/tmp/#{@filename}")) 
    #saves tempfile as paperclip attachment 
end 

我调用在卸载到延迟在职职工rake任务此方法。

所以在耙任务:Object.delay.csv_export