0

レール2.3.14、ルビー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行があり、タスクは50時間実行されます。行は、dbに3秒ごとに追加されます。問題はありませんが、ps -ax | grep rakeは、2GBを占有したことを示します。メモリリークの問題は何でしょうか?

4

2 に答える 2

3

コメントの反復。2 番目のループは、次の方法で回避できます。post.comments.destroy_all

また、ユーザーがコメントをすると投稿に関係ないことがわかるので(ユーザーはたくさん投稿できるからね?)、操作を分割できます。最初にコメント テーブルを直接切り詰め、2 番目に投稿に関連するユーザーを取得し (メッセージを送信した投稿ごとにjoinandgroup byを使用するか、単に使用することができます)、3 番目にユーザーをループしてメッセージを送信します。join

于 2013-03-18T06:12:08.453 に答える
2

使用する

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