繁体   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