Rails绕过数据库维护超时

时间:2014-04-16 22:16:37

标签: ruby-on-rails

我有一个rails应用程序,其中包含model = workorder

该数据库包含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)如何绕过此代码的超时?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这可能是因为所有记录都被加载到内存中。尝试在batches处理:

Workorder.where("wonum like ?", "13-%").find_each { |wo| wo.destroy }

正如布拉德所提到的,您可以使用delete_all,但只有在您不需要删除任何相关模型时才能这样做。

回答(2),这不是清理数据库的逻辑方法(使用前端上的链接)。创建rake任务,或从控制台与数据库交互(运行rails console)。