如何在后台任务中生成CSV文件?

Shp*_*ord 3 csv ruby-on-rails background-process ruby-on-rails-3

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

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

我目前正在使用csv_builder在视图中生成CSV文件...所以能够仍然使用它并且以某种方式将其直接输出到CSV文件中然后我可以使用回形针上传到S3,这真是太棒了.但那可能太牵强了.

sba*_*uch 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
Run Code Online (Sandbox Code Playgroud)

我在rake任务中调用此方法,该任务卸载到延迟的作业工作者.

所以在rake任务中: Object.delay.csv_export