如何有效地为Devise用户提供种子?

时间:2011-03-25 14:51:42

标签: mysql ruby-on-rails performance devise

我正在尝试使用rake db:seed在我的Rails 3项目中为大约100,000个用户播种,这真的很慢!

以下是代码示例:

# ...
User.create!(
  :display_name => "#{title} #{name} #{surname}",
  :email => "#{name}.#{surname}_#{num}@localtinkers.com",
  :password => '12341234'
)

虽然有效,但非常慢,因为对于每个用户:

  1. 设计发出SELECT语句,以确定电子邮件是否已被删除。
  2. 发布单独的INSERT语句。
  3. 对于其他对象,我使用“ ar-extensions ”和“ activerecord-import ”gems,如下所示:

    tags.each do |tag|
      all_tags << Tag.new(:name => tag)
    end
    
    Tag.import(all_tags, :validate => false, :ignore => true)
    

    上面只为所有标记创建一个INSERT语句,它可以非常快,就像从SQL转储中恢复MySql数据库一样。

    但是对于用户我不能这样做,因为我需要Devise为每个用户生成加密密码,盐等。有没有办法在SQL端生成它们,还是有其他有效的方式来播种用户?

    谢谢。

1 个答案:

答案 0 :(得分:9)

怎么样:

u = User.new(
  :display_name => "#{title} #{name} #{surname}",
  :email => "#{name}.#{surname}_#{num}@localtinkers.com",
  :password => '12341234'
)
u.save!(:validate => false)

创建并保存记录而不执行验证,因此无需检查电子邮件地址的唯一性。显然,这方面的缺点是您没有受到用户的任何其他验证的保护,因此请务必先检查您的数据!