rails 2.3.14,ruby 1.8.7
我有一个佣金任务:
Post.all.each do |post|
post.comments.each { |pc|
pc.delete
}
user = post.user
pc = user.comment.build(
:text => 'Test text',
......
)
result = pc.send_comment_http
if result.success?
pc.save!
else
puts error_message
end
end
帖子有100k行和任务运行50h alredy,每3秒在db中添加一行,这不是问题,但ps -ax | grep rake表示占用2 gb。什么可能是内存泄漏的问题?
答案 0 :(得分:3)
评论的迭代。您可以通过以下方式避免第二个循环:post.comments.destroy_all
此外,当用户发表评论时,我可以看到它与帖子无关(因为用户可以有很多帖子,对吗?),因此您可以分割操作。首先直接截断评论表,第二个截取与帖子相关的用户(您可以使用join
和group by
,或者只使用join
,如果您希望每个帖子发送一个消息),第三次循环用户并发送消息。
答案 1 :(得分:2)
使用
Post.find_each do |post|
...
end