我的应用程序中有一些对象(例如任务、联系人等)的 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 包含一些损坏的东西。
如何将我的“/tasks.csv”、“/contacts.csv”等保存为服务器上的文件(在这种情况下位于 zip-archive 内部)?