約 10 万件のレコードを作成する必要があります。これらのレコードは csv ファイルにあり、create_fixtures 関数を使用してロードされています。私の開発マシンでは遅いですが、完了します。問題は、プロセスごとにメモリ制限がある本番環境で始まり、rake プロセスが強制終了されます。create_fixtures がすべてのデータをメモリにインポートしているためだと思います。小さなチャンクを強制的にインポートする方法を知っている人はいますか(1つの大きなcsvをいくつかの小さなcsvにカットする前に)。
2 に答える
1
しないでください!
create_fixturesは、テストデータをロードするために設計されています。テストデータは、機能を実行するために必要なだけの大きさにする必要があります。何千ものレコードを本番(またはその他の種類の)データベースにロードすることを目的としたものではありません。一回限りの場合は大丈夫かもしれませんが、通常のこととしてはとても緊張します。
あなたのデータが十分に単純である場合、つまり単純なものString#split
が機能する場合、それはおそらくあなたのアプローチであるはずです。
File.foreach(csv_file_path) do |line|
fields = line.split(/,/)
# create records from the array of fields
end
それ以外の場合(つまり、引用符やコンマを含む文字列値、フィールド値の欠落、複数のレコード形式など)は、Ruby1.8.6インストールの一部であるCSVライブラリを確認する必要があります。 、 1.9以降のCSVに代わるFasterCSVGemを見てください。
更新:便利なことに、ライアンベイツはシードデータの厄介なトピックに関するスクリーンキャストを投稿しました...
于 2009-09-10T11:12:07.140 に答える
0
CSV をどのように読み込んで解析していますか? Ruby の File utils を使用して、自分ですべての行を開いて読み取り、解析すると思います。
于 2009-09-10T11:04:00.170 に答える