迁移包含以下内容:内存泄漏3.0.11迁移
Service.find_by_sql("select
service_id,
registrations.regulator_given_id,
registrations.regulator_id
from
registrations
order by
service_id, updated_at desc").each do |s|
this_service_id = s["service_id"]
if this_service_id != last_service_id
Service.find(this_service_id).update_attributes!(:regulator_id => s["regulator_id"],
:regulator_given_id => s["regulator_given_id"])
last_service_id = this_service_id
end
end
,它是吃了记忆,在那里它不会在允许的Heroku 512MB的运行点(注册表具有60,000项)。有没有已知的问题?解决方法?修复Rails的更高版本?
提前感谢以下要求澄清
编辑:
这是所有相关的源 - 迁移其余创建正在填充的两个新列。这种情况是我在注册表中拥有来自多个来源(服务的监管机构)的服务数据。我已决定将一些数据([prime] regulator_id和[prime] regulator_given_key)提升到主要监管机构的服务表中,以加速某些查询。
这不是内存泄漏,只是一个使用大量内存的情况,因为'.each'之前的所有内容都会导致Rails在开始迭代之前加载60K行。你能否用文字描述你试图解决的问题(编辑问题,离开源代码);我确信有一个简单的解决方案。 – 2012-03-16 12:58:17
它看起来像你试图从'registrations'到'services'复制两列,假设在现有的'registrations'中,'regulator_given_id'和'regulator_id'对于任何给定的'service_id'是相同的。 (我假设一旦完成,你可以从注册中删除这两列,并更新':belongs_to'和':has_many'模型声明)。如果这是正确的,那么有一个简单的解决方案。 – 2012-03-16 13:12:19
是的你是对的。我试图想到一个简单的解决方案,但没有提出一个解决方案。我没有提到的一件事是,可能有多个注册服务,我只想要最近的(只是为了防止对你正与我分享的精美优雅的快捷方式的影响)。 – baldmark 2012-03-16 13:19:10