2016-06-26 10 views
0

私はMySQLとRails 4.2.3を使用しています。私はonwersと呼ばれるテーブルを持っており、それは常にそれを供給しているバックグラウンドジョブがあるので、2週間成長を続けるでしょう。Railsで増えているすべてのレコードを更新するには

今、私はRailsの中のすべてのOnwerレコードを更新したいと思いますし、次は私が仕事達成てる方法です:

Owner.find_each(batch_size: 100) do |owner| 
    Owner.get_owner_details_from_github owner.login 
end 

は何だろうコードを書くための最良の方法だろうが仕事を続けている?一方では ownersという表が、もう1つは ownersにいくつのレコードがあるにしても、コードはその仕事をします。

答えて

1

1つの方法は、このコードをレーキタスクに置き、cronジョブで一定の間隔でそのタスクを実行させることです。

また、sidetiq:https://github.com/tobiassvn/sidetiqのようなツールを使用することもできます。定義したい間隔でジョブを永続的に実行してエンキューするデーモンプロセス(sidekiq)を使用します。

+0

答えに感謝しますが、それはポイントではありません。問題は、「オーナー」が毎回増えていることです。だから、それは一種のレースになるでしょう。 1つのジョブでは、「所有者」レコードが作成されており、他のジョブでは、同じ「所有者」レコードが更新されています。 –

+0

'logged_in_at'という名前の' owners'テーブルにdatetime列を追加し、更新を行うときに 'Time.now'に設定します。あなたの更新ジョブは、 'logged_in_at'に対して' nil'を持っている '所有者'のみを照会してください。定期的なスケジュールで更新ジョブを実行し続けると、新しいレコードが絶えず削られます。事実の後に何を更新するかを決定するのではなく、あなたの作成ジョブがイベントをトリガできる場合は、より良いでしょう。 –

関連する問題