mysql - 如何高效播种Devise用户?

标签 mysql ruby-on-rails performance devise

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

这是代码示例:

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

它有效,但它真的很慢因为对于每个用户:

  1. 设计发出 SELECT 语句以查明电子邮件是否已被接收。
  2. 发出单独的 INSERT 语句。

对于其他对象,我使用“ar-extensions”和“activerecord-import”gem,如下所示:

tags.each do |tag|
  all_tags << Tag.new(:name => tag)
end

Tag.import(all_tags, :validate => false, :ignore => true)

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

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

谢谢。

最佳答案

怎么样:

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

应该在不执行验证的情况下创建和保存记录,因此不检查电子邮件地址的唯一性。显然,这样做的缺点是您也不会受到用户的任何其他验证的保护,因此请务必先检查您的数据!

关于mysql - 如何高效播种Devise用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434101/

相关文章:

mysql - 使用另一列最大值更新

php - 如何在用户定义的公式中比较数据库中的数据

ruby-on-rails - Rails 3 "_method=PUT"仍然可以工作吗?

ruby-on-rails - 使用 Ransacker 过滤关系

ios - 每次启动时 UIWebView 白屏,同时预加载所有选项卡

MySQL记录时间戳发生变化

ruby-on-rails - rails : How do I check if a column has a value?

c# - Cassandra 插入性能 c#

php - 检测匹配的高效算法

java - 使用Android QR Scanner从MySQL数据库检索数据