下面的代码不会产生错误,而是在大约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
答案 0 :(得分:0)
可能会超时。您可以使用delayed_job
或resque
等宝石将其作为后台流程进行处理。