2010-12-13 123 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