尝试在大约3000行之后在Rails中导入一个大的csv?

时间:2017-01-30 22:36:16

标签: ruby-on-rails csv

下面的代码不会产生错误,而是在大约2800行之后它停止并且拖尾日志只显示最后添加的行。我预感到内存耗尽,但它不应该有2GB内存和1GB交换。此外,对于此文件大小,CSV.foreach应该更有效率。

该文件通过网络界面上传,大约有2MB。

class Sale < ActiveRecord::Base
  belongs_to :client
  belongs_to :car
  belongs_to :company

  require 'csv'

  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
     
      sale_hash = row.to_hash
      sale = Sale.where(id: sale_hash["id"], date: sale_hash["date"].to_datetime)
        
      if sale.count == 1
        sale.first.update_attributes(sale_hash)
      else
        Sale.create!(sale_hash)
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

可能会超时。您可以使用delayed_jobresque等宝石将其作为后台流程进行处理。