Как эффективно разрабатывать пользователей? - PullRequest
4 голосов
/ 25 марта 2011

Я пытаюсь посеять около 100 000 пользователей, используя rake db: seed в моем проекте Rails 3, и это действительно медленно!

Вот пример кода:

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

Это работает, но это очень медленно , потому что для каждого пользователя:

  1. Devise выдает инструкцию SELECT, чтобы выяснить, занято ли уже письмо.
  2. Отдельная INSERTВыдается оператор.

Для других объектов я использую драгоценные камни " ar-extensions " и " activerecord-import " следующим образом:

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 Ответ

9 голосов
/ 25 марта 2011

Как насчет:

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

Это должно создать и сохранить запись без выполнения проверок и, следовательно, без проверки уникальности адреса электронной почты.Очевидно, что недостатком этого является то, что вы также не защищены другими проверками пользователя, поэтому сначала проверьте свои данные!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...