0

轨道 2.3.14,红宝石 1.8.7

我有一个 rake 任务:

    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 行并且任务已经运行了 50 小时,在 db 中每 3 秒添加一次行,这没问题,但是 ps -ax | grep rake 表示占用了 2 gb。内存泄漏问题可能是什么?

4

2 回答 2

3

评论的迭代。您可以通过以下方式避免第二个循环:post.comments.destroy_all

另外,当用户发表评论时,我可以看到它与帖子无关(因为用户可以有很多帖子,对吗?),因此您可以划分操作。首先直接截断评论表,其次获取与帖子相关的用户(您可以使用joinand group by,或者join如果您希望每个帖子发送消息时使用),第三次循环用户并发送消息。

于 2013-03-18T06:12:08.453 回答
2

采用

Post.find_each do |post|
  ...    
end
于 2013-03-18T09:53:27.880 回答