[英]Rails bypass timeout for database maintenance
我有一個包含模型=工作workorder
的Rails應用程序。
該數據庫包含22,468個工作訂單,其wonum
以13-
開頭。 我想刪除它們。 workorder
有多個具有has-many
表,所以我想以編程方式進行操作,而不是嘗試直接對數據庫使用SQL。
這是我要使用的代碼:
<div class="span11">
<h4>Records Deleted: </h4>
<%= Workorder.where("wonum like ?", "13-%").count %>
<%= Workorder.where("wonum like ?", "13-%").destroy_all %>
</div>
我正在使用Webbrick在Mac上運行此代碼。 清理數據庫后,將其上傳到Heroku。
我遇到的問題是代碼需要很長時間才能運行,並且遇到了超時錯誤。
問題:
1)這是清理數據庫的邏輯方法嗎?
2)如何繞過此代碼的任何超時?
謝謝您的幫助!
這可能是因為所有記錄都已加載到內存中。 嘗試分批處理:
Workorder.where("wonum like ?", "13-%").find_each { |wo| wo.destroy }
如Brad所述,您可以使用delete_all
,但僅在不需要刪除任何關聯模型的情況下才可以使用。
要回答(2),否(這不是清除數據庫的邏輯方法)(使用前端上的鏈接)。 創建一個rake
任務,或者從控制台(運行rails console
)與數據庫進行交互。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.