我正在使用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
答案 0 :(得分:1)
我遇到了同样的问题
在几个控制台类型表达式上运行rake db:seed, 做了一丝追踪后说: **调用环境(first_time) **执行环境
现在我没有环境'first_time' 我查看了我改变的内容,结果发现我在尝试连接数据库时默认调用初始化程序中的不同环境。
看看你的database.yml或application.rb文件可能存在冲突
干杯