3
我试图种子使用rake db的大约100,000个用户:种子在我的Rails 3项目中,它非常慢!如何高效地设计用户?
下面的代码示例:
# ...
User.create!(
:display_name => "#{title} #{name} #{surname}",
:email => "#{name}.#{surname}_#{num}@localtinkers.com",
:password => '12341234'
)
它的工作原理,但它是很慢,因为每个用户:
- 设计发出SELECT语句,以找出是否电子邮件已经拍摄。
- 发出单独的INSERT语句。
对于其他对象,可以使用“AR-扩展”和“ActiveRecord的进口”宝石如下:
tags.each do |tag|
all_tags << Tag.new(:name => tag)
end
Tag.import(all_tags, :validate => false, :ignore => true)
以上所有的标签和它创建只是一个INSERT语句作品真的很快,就像MySql数据库从SQL转储中恢复一样。
但对于用户我不能这样做,因为我需要Devise为每个用户生成加密密码,盐等。有没有一种方法可以在SQL方面生成它们,或者有其他有效的种子用户方法吗?
谢谢。
这消除了每个新用户的子弹1:“选择”语句,它的工作速度稍快一点,但最慢的是“插入”的样子。种子中的数据用于测试,因此无需验证即可。 这将是很好,如果我可以为10,000个用户做一个“插入”... 感谢您的提示,但它有帮助。 – 2011-03-25 15:52:33
对不起,gotcha - 没有发现大宗进口。只是一个想法:你能以某种方式手动触发设计的before_save钩子,假设它是如何工作的? – 2011-03-25 16:19:37
这实际上是个好主意!我很确定我可以,即使其中一些方法是私有的 - 我仍然可以调用它们,因为Ruby是一种令人敬畏的编程语言。然后,我将汇总一组原始数据,然后发出一个批量插入语句...谢谢你,我将你的答案标记为正确。 :) – 2011-03-25 16:29:15