簡體   English   中英

Rails繞過超時進行數據庫維護

[英]Rails bypass timeout for database maintenance

我有一個包含模型=工作workorder的Rails應用程序。

該數據庫包含22,468個工作訂單,其wonum13-開頭。 我想刪除它們。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM