2010-12-13 67 views
0

我使用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 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 

我上呼吁,我打印出用户的数量看跌此错误。 如果我将100.times降低到约10倍,则填充工作正常,并且对User.all.count的调用以正确的值10作出响应。 我可以猜到的最好的情况是,调用“faker “会被重载并且尚未返回导致nil对象的值。但是,也许populate正试图将其作为单个数据库事务来运行,并且会超载一些缓冲区。

有没有办法将插入“刷新”到数据库中,以便每个事务都写入数据库或暂停而“faker”响应,因此我可以创建更大的数据集来处理?

Thanks 
Steve Woolley 
[email protected] 

回答

1

我有同样的问题

只是运行耙分贝: **调用环境(FIRST_TIME) **执行环境:在少数控制台类型的表达式种子, 做一个跟踪它说后

现在我没有一个环境'first_time' 我看着我改变了什么,事实证明,当初始化器尝试连接到数据库时,我默认调用了不同的环境。

看看你的database.yml或application.rb中的文件有可能是一个冲突

干杯

+0

感谢您的答复。我查了一下,没有冲突。但我会认为,如果发生冲突,甚至连一次都无法运行。就目前来看,我可以运行这10次,但没有更大的集合。 – 2010-12-19 17:59:54