J'utilise db: populate pour précharger des exemples de données dans mon projet rails. Par exemple, je suis en utilisant le code suivant pour remplir le db:Utilisation de db: remplissage provoquant une exception nulle
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
Cependant, ce que je reçois est une erreur quand je lance « rake db: équipez ». Je reçois:
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
Je reçois cette erreur sur l'appel à puts où j'imprime le nombre d'utilisateurs. Si je réduis le 100.times jusqu'à environ 10 fois, le remplissage fonctionne correctement et l'appel à User.all.count répond avec la valeur correcte de 10. Le meilleur que je peux deviner est que l'appel à "faker" "est surchargé et n'a pas encore retourné une valeur qui provoque l'objet nul. Peut-être cependant, le remplissage tente d'exécuter cela comme une transaction de base de données unique et surcharge un peu de tampon. Existe-t-il un moyen de "vider" l'insertion dans la base de données afin que chaque transaction soit écrite dans la base de données ou en pause pendant que "faker" répond pour que je puisse créer un ensemble de données plus grand?
Thanks
Steve Woolley
[email protected]
Merci pour la réponse. J'ai vérifié et il n'y a pas de conflit. Mais je pense que s'il y avait un conflit, je ne serais même pas capable de courir même une fois. En l'état, je peux courir 10 fois, mais pas beaucoup plus gros. –