使用db:populate导致nil异常

时间:2010-12-13 23:24:33

标签: rake ruby-on-rails-3

我正在使用db:populate将一些示例数据预加载到我的rails项目中。例如,我使用以下代码填充db:

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”的调用过载并且还没有返回导致nil对象的值。但是,也许,populate正在尝试将其作为单个数据库事务运行并且正在重载某些缓冲区。

有没有办法将插件“刷新”到数据库中,以便每个事务都写入数据库或暂停,而“faker”响应,这样我就可以创建一个更大的数据集来使用?

Thanks
Steve Woolley
swoolley@ardentsoft.com

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题

在几个控制台类型表达式上运行rake db:seed, 做了一丝追踪后说: **调用环境(first_time) **执行环境

现在我没有环境'first_time' 我查看了我改变的内容,结果发现我在尝试连接数据库时默认调用初始化程序中的不同环境。

看看你的database.yml或application.rb文件可能存在冲突

干杯