2017-06-01 73 views
2

這是一段代碼。當我將此添加到與timeout cron整個陣列被保存兩次。當我刪除超時沒有得到保存Rails:Active Record Timeout

在這種情況下,我們希望保存數組結果(來自api)與超過100k記錄保存到數據庫。我已經使用BULK INSERT和TinyTds寶石這裏

ActiveRecord::Base.establish_connection(adapter: 'sqlserver', host: "xxx", username: "xxx", password: "xxx", database: "xxx", azure: true, port: 1433, timeout: 5000) 

class Report < ActiveRecord::Base 
    self.primary_key = 'id' 
end 

my_array = [] #count of 100000 records 
Report.bulk_insert(:account_owner_id) do |worker| 
    my_array.drop(2).each do |arr| 
    worker.add account_owner_id: arr[0] 
    end 
end 
+0

請問你是如何觸發這段代碼的?它來自控制器嗎?同樣的情況發生在你從腳本運行它嗎?是否有機會將模式和數據文件發佈到某處 - 或者至少是數據文件的一部分。 – Andy

+0

我從腳本運行它。這是我運行的代碼。除此之外,我還有一個將數據填充到my_array的api。添加超時到活動記錄連接是否存在問題?當我使用cron運行代碼時,會發生這個問題。有兩個訪問數據庫的腳本,它們都有相同的代碼 –

回答

-1

你可以嘗試刪除timeout,如圖所示here添加ignore: true您批量插入。可能有插入失敗。

Report.bulk_insert(:account_owner_id, ignore: true) do |worker| 
+0

忽略停止要插入的批次 - 但在我的情況下,它將批次保存x次。 –

+0

如果一條記錄失敗,它會繼續。來自docs:'忽略選項會忽略那些失敗的插入(因爲重複的鍵或者列中的空值不是空約束),並插入批處理的其餘部分。 – Shannon