アップロードされたファイルをモデルにインポートするために 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
バックグラウンド プロセスを使用したいのですが、ユーザーは、システムの次のステップに進む前に、インポートされた行数を確認する必要があります。
そのため、アクション チャンクを使用してより少ない行数のみを読み取り、カウンターを設定し、何らかの進行状況でビューを更新してから、前のカウンターを開始点として使用してメソッドを再度実行する必要があると考えていました。
FasterCSV に設定された行数だけを読み取らせ、開始点のオフセットを設定する方法がわかりません。
誰もこれを行う方法を知っていますか? または、これを処理するより良い方法はありますか?