Импортировать CSV партиями в Rails?
используя FasterCSV для импорта загруженного файла в модель,отлично работает для небольших файлов. Однако когда я пытаюсь импортировать большой набор данных (21 000 строк), это занимает много времени, и я получаю тайм-ауты браузера на работающем сервере.
Это мой текущий рабочий код: я
logcount=0
Attendee.transaction do
FCSV.new(file, :headers => true).each do |row|
row[1] = Date.strptime(row[1], '%m/%d/%Y')
record = @event.attendees.new(:union_id => row[0], :dob => row[1], :gender => row[2])
if record.save
logcount += 1
end
end
end
Я бы хотел использовать фоновый процесс, но пользователь должен увидеть, сколько строк было импортировано, прежде чем они смогут перейти к следующему шагу системы.
Итак, я думал, что я должен использоватьдействие chunking и только прочитайте меньшее количество строк, установите счетчик, затем обновите представление с некоторым прогрессом, затем снова запустите метод, используя предыдущий счетчик в качестве начальной точки.
Я могу'Кажется, мы не видим, как заставить FasterCSV читать только определенное количество строк, а также установить смещение для начальной точки.
Кто-нибудь знает как это сделать? Или есть лучший способ справиться с этим?