我必须创建大约100k条记录。 这些记录位于csv文件中,正在使用create_fixtures函数加载。 它在我的开发机器上很慢,但它完成了。问题始于生产,每个进程都有内存限制,导致耙机进程被终止。 我认为这是因为create_fixtures正在将所有数据导入到内存中。有没有人知道如何强制它导入较小的块(在我将一个大的csv切成几个较小的块之前)。Ruby on rails:create_fixtures内存问题
0
A
回答
0
你是如何加载/解析CSV的?我想我会使用Ruby的文件工具打开并阅读和解析每一行我自己。
1
不要这样做!
create_fixtures是专为加载测试数据而设计的,测试数据应该只有在需要锻炼功能的时候才会大。它是而不是,用于将数千条记录加载到生产(或任何其他类型)的数据库中。如果这是一次性的,那么也许可以,但作为一个常规的事情,它会让我非常紧张。
如果你的数据是很简单的,我指的是一个简单的String#split
会的工作,那么这也许应该是你的方法,像
File.foreach(csv_file_path) do |line|
fields = line.split(/,/)
# create records from the array of fields
end
否则(即你可能有引号或逗号的字符串值,缺少字段值或多种记录格式等),您应该查看已安装Ruby 1.8.6的CSV library,或者更好的方法是查看FasterCSV Gem,它在1.9以后取代了CSV。
UPDATE:相当方便,瑞安贝茨只是种子数据的无理取闹话题posted a screencast ...
相关问题
- 1. ruby on rails资产存储问题heroku
- 2. Ruby on Rail,问题与数据保存
- 3. 用Ruby on Rails保存问题
- 4. Ruby on Rails的会话存储问题
- 5. Ruby on Rails - 编码问题
- 6. Ruby on rails资源问题
- 7. Ruby on Rails i18n问题
- 8. Ruby on rails mysql问题
- 9. Ruby on Rails .htaccess问题
- 10. Ruby on Rails路由问题
- 11. Ruby on Rails:Application.js订购问题
- 12. Ruby on Rails宝石问题
- 13. Ruby on Rails问题PotionStore
- 14. Ruby on Rails的问题
- 15. Ruby on Rails - AJAX - div问题
- 16. Ruby on Rails调试问题
- 17. Ruby on Rails MVC问题
- 18. 设计问题Ruby on rails
- 19. Ruby on rails和Heroku问题
- 20. Ruby on Rails RVM $ PATH问题
- 21. ruby on rails SQLite问题
- 22. Ruby On Rails路线问题
- 23. Ruby on Rails ERB问题
- 24. HABTM Ruby On Rails问题
- 25. Minitest问题Ruby on Rails
- 26. 使用Ruby on Rails存储从表格中提问的问题
- 27. Kernel.open发生Ruby内存问题
- 28. Ruby on Rails的内存泄漏
- 29. Ruby on Rails中的设计问题
- 30. Ruby on Rails 3选择助手问题
虽然我明白,这是不好的做法,加载在生产固定装置(例如无验证),对于一些数据(如国家/城市/等...)这是必要的。我在这里找到了很好的讨论:http://railspikes.com/2008/2/1/loading-seed-data (看起来不是夹具内存问题,而是人们如何处理播种生产。) – 2009-09-10 11:35:00
也许我正在读不同的部分。我看到这个“我不喜欢夹具,因为他们不验证数据”。该帖子的评论提到了ar-extensions,如果数据库批量写入速度是一个问题,这是非常有用的。我并不需要种子数据(这是你要做的所有事情 - 这个问题并不清楚),我只是觉得如果你放弃尝试使用夹具加载某些东西它不是为了设计。 – 2009-09-10 19:05:48