[英]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.