私は5MMラインファイルを読み込もうとしていますが、今はherokuで私のメモリ使用量を超えています。私の方法は〜200人/秒というやや速いです。私はそれがインポートでクラッシュしていると信じています。私の計画は1,000または10,000のバッチでインポートすることでした。私は私が私のファイルの末尾だと言うのですか私の質問があり、ルビーは.eof
方法が、そのFile
方法を持っている、と私はCSV解析が多すぎるメモリを取る
def self.import_parts_db(file)
time = Benchmark.measure do
Part.transaction do
parts_db = []
CSV.parse(File.read(file), headers: true) do |row|
row_hash = row.to_hash
part = Part.new(
part_num: row_hash["part_num"],
description: row_hash["description"],
manufacturer: row_hash["manufacturer"],
model: row_hash["model"],
cage_code: row_hash["cage_code"],
nsn: row_hash["nsn"]
)
parts_db << part
end
Part.import parts_db
end
end
puts time
end
しかし、あなたは上記の例では '.foreach'を推奨しています。 – gemart
'CSV.foreach'は' each_slice'に必要なEnumerableを返しません。 'File.read()'を使わない限り、 'CSV.parse'を使っても構いません。 2番目のケースでは、2000行のみです。 –
私はあなたの例を使用しました。私は、424,000回のインポート後に英雄コンソールから 'ETIMEDOUT:read ETIMEDOUT'エラーを受け取りました。私はそれをどのように乗り越えることができるか知っていますか? – gemart