Importar CSV em lotes de linhas no Rails?
Estou usando o FasterCSV para importar um arquivo enviado para um modelo e ele está funcionando muito bem para arquivos pequenos. No entanto, quando tento importar um conjunto de dados grande (21.000 linhas), ele leva muito tempo e eu recebo tempos limite do navegador no servidor ativo.
Este é o meu código de trabalho atual:
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
Eu adoraria usar um processo em segundo plano, mas o usuário precisa ver quantas linhas foram importadas antes de poderem passar para a próxima etapa do sistema.
Então, eu estava pensando que deveria usaração chunking e apenas ler um número menor de linhas, definir um contador, atualizar a visualização com algum tipo de progresso e, em seguida, executar o método novamente usando o contador anterior como ponto inicial.
Não consigo ver como obter o FasterCSV para ler apenas um número definido de linhas e também definir um deslocamento para o ponto inicial.
Alguém sabe como fazer isso? Ou há uma maneira melhor de lidar com isso?