アプリケーションにいくつかのオブジェクト(タスク、連絡先など)の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ファイルが生成されます。
次に、すべてのオブジェクトをエクスポートして圧縮します。私はrubyzipgemを使用して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に1行しかない場合でも、Timeout :: Errorが発生します)、結果のzipアーカイブに壊れたものが含まれているため、問題があるようです。
「/tasks.csv」や「/contacts.csv」などをサーバー(この場合はzip-archive内)にファイルとして保存するにはどうすればよいですか?