Как создать файл CSV в фоновом режиме? - PullRequest
3 голосов
/ 09 января 2012

Мы разрешаем пользователям загружать все свои данные в формате CSV, но мы обнаруживаем, что для многих пользователей (у которых много данных) нам действительно необходимо сгенерировать файл CSV в фоновом режиме, а затем предоставить им ссылка для скачивания позже.

Я знаю, как сгенерировать файл CSV на лету в представлении , но я не совсем уверен, как лучше создать его в фоновом режиме.

В настоящее время я использую csv_builder для генерации CSV-файлов в представлении ... поэтому было бы здорово иметь возможность использовать это и просто каким-то образом выводить это непосредственно в CSV-файл, который я затем можно загрузить на S3 с помощью скрепки ... но это может быть слишком надуманным.

1 Ответ

5 голосов
/ 03 мая 2012

У меня была похожая проблема, но я использовал встроенную библиотеку CSV для rails, а не csv_builder (о которой я ничего не знаю).

в моей модели у меня есть метод для генерации CSV и сохранения в виде вложения paerclip на s3:

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

Я вызываю этот метод в граблях, которые выгружаются на задержанного рабочего.

Итак, в задании на грабли: Object.delay.csv_export

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...