Использование db:populate вызывает нулевое исключение

Я использую 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

Я получаю эту ошибку при вызове puts, где я распечатываю количество пользователей. Если я уменьшу 100 раз примерно до 10 раз, заполнение будет работать правильно, и вызов User.all.count ответит правильным значением 10. Лучшее, что я могу предположить, это то, что вызов «faker» получает перегружен и еще не вернул значение, вызывающее нулевой объект. Однако, возможно, populate пытается запустить это как единую транзакцию базы данных и перегружает какой-то буфер.

Есть ли способ «сбросить» вставку в базу данных, чтобы каждая транзакция записывалась в базу данных или приостанавливалась, пока «мошенник» отвечает, чтобы я мог создать больший набор данных для работы?

Thanks
Steve Woolley
[email protected]

person Steve Woolley    schedule 13.12.2010    source источник


Ответы (1)


У меня такая же проблема

просто запустив rake db:seed для нескольких выражений типа консоли, после выполнения трассировки он говорит: ** Вызвать среду (first_time) ** Выполнить среду

Теперь у меня нет среды «first_time». Я посмотрел, что я изменил, и оказалось, что я по умолчанию вызывал другую среду в инициализаторе при попытке подключения к базе данных.

Взгляните на ваши файлы database.yml или application.rb, возможно, есть конфликт

Ваше здоровье

person Cognition.Mind    schedule 18.12.2010
comment
Спасибо за ответ. Проверил, конфликта нет. Но я бы подумал, что если бы был конфликт, я бы даже 1 раз не смог это запустить. В нынешнем виде я могу запустить это 10 раз, но не намного большие наборы. - person Steve Woolley; 19.12.2010