如何保存我的Rails应用程序创建的响应?

时间:2012-07-22 16:58:36

标签: ruby-on-rails file zip

我的应用程序中存在某些对象(例如任务,联系人等)的CSV导出。它只是渲染CSV文件:

respond_to do |format|
  format.html
  format.csv { render text: Task.to_csv } # I have self.to_csv def in model
end

当我在没有问题的情况下转到'/tasks.csv'时会生成一个CSV文件。

现在我要导出所有对象并压缩它们。我正在使用rubyzip gem来创建zip文件。现在,我创建包含所有CSV的zip文件的代码如下所示:

Zip::ZipFile.open("#{path_to_file}.zip", Zip::ZipFile::CREATE) do |zipfile|
  zipfile.file.open("tasks.csv", "w") { |f| f << open("http://#{request.host}:#{request.port.to_s}/tasks.csv").read }
  # the same lines for contacts and other objects
end

但似乎它出现了问题,因为它已经执行了很长时间(即使CSV中只有一行,我也会收到Timeout :: Error),并且生成的zip-archive包含一些内容。< / p>

如何将我的“/tasks.csv”,“/ contact.csv”等保存为服务器上的文件(在本例中为zip-archive内)?

1 个答案:

答案 0 :(得分:0)

我做到了!代码是:

Zip::ZipFile.open("#{path_to_file}.zip", Zip::ZipFile::CREATE) do |zipfile|

  zipfile.file.open("tasks.csv", "w") do |f| 
    CSV.open(f, "w") do |csv|
      CSV.parse(Task.to_csv) { |row| csv << row }
    end
  end

end