2

アプリケーションにいくつかのオブジェクト(タスク、連絡先など)の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内)にファイルとして保存するにはどうすればよいですか?

4

1 に答える 1

1

やったよ!コードは次のとおりです。

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
于 2012-07-22T17:58:31.120 に答える