Я использую db: populate для предварительной загрузки некоторых примеров данных в мой проект rails.Например, я использую следующий код для заполнения базы данных:
require 'faker'
namespace :db do
task :populate => :environment do
Rake::Task['db:reset'].invoke
100.times do |u|
User.create!(
:name => Faker::Name.name,
:email => Faker::Internet.email
)
end
puts "The count of user(s) is #{User.all.count}"
User.all.each do |u|
# Add some more info based for each user
end
end
end
Тем не менее, я получаю сообщение об ошибке, когда запускаю «rake db: populate».Я получаю:
rake aborted!
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
Я получаю эту ошибку при вызове к Put, где я распечатываю количество пользователей.Если я уменьшу 100. примерно до 10., заполнение будет работать правильно, и вызов User.all.count ответит правильным значением 10. Лучшее, что я могу догадаться, это то, что вызов "фейкер" получаетперегружен и еще не вернул значение, которое вызывает объект nil.Однако, возможно, заполнение пытается выполнить это как одну транзакцию базы данных и перегружает некоторый буфер.
Есть ли способ «сбрасывать» вставку в базу данных, чтобы каждая транзакция записывалась в базу данных или делала паузу, пока «фейкер» отвечает, чтобы я мог создать больший набор данных для работы?
Thanks
Steve Woolley
swoolley@ardentsoft.com