2011-11-14 10 views
0

私は、行updated_atから30分後にデータベースから行を削除したいと思っています。私はこの時間に基づいて行を見つける方法を知っていますが、実際に時間間隔で削除する方法はわかりません。Rails 3:30分ごとにメソッド/スクリプトを実行する方法

これを達成するにはどのような方法が良いですか? Rails風のものがありますか?

答えて

1

Delayed Jobを拡張しませんがこの種のもののための一般的なツールです。

Delayed::Job.enqueue(
    DeleteTheThing.new(the_thing), 
    :run_at => 30.minutes.from_now.getutc 
) 
:あなたのオブジェクトが削除されるべきであることを、あなたの遅延タスクをキュー決める際には、

class DeleteTheThing 
    attr_accessor :thing_id 

    def initialize(the_thing) 
    @thing_id = the_thing.id 
    end 

    def perform 
    # Delete the thing if it should still be deleted 
    end 
end 

そして:

あなたは、エントリを削除するにはperform方法で単純なクラスを作ることができます

+0

muあなたはResqueよりも遅れた仕事を好んでいますか? –

+0

@Michael:私はResqueであまり仕事をしていませんでした。私はDJに何の問題もなかったので、 "それが壊れていなければ、それを修正しないでください"。 –

0

なぜあなたのデータベースの代わりにmemcachedを使用しないのですか?次に、あなたは何かをすることができる

def get_data(user) 
    Rails.cache.fetch("cached_data-#{user.name}", :expires_in => 30.minutes) do 
     ## create some hash here 
     {:name => user.name, :more_data => user.data} 
    end 
    end 

データは、ハッシュが30分間使われなくなるまで持続するでしょう。


あなたがアクティブなレコードのように行う場合は、5分ごとまたはそのcronジョブを持つことができ、それがうまく

1

最良の選択肢は、遅れている仕事に似ていますが、よりよく、より簡単なものであるResqueを使用することです。 hereは簡単なチュートリアルです。 Cronは30分間隔で設定できます。

+0

それはどんな点ではより単純です。 muの例はかなり簡単です。私は2つの違いについて学びたいと思っています。学習するために選択する必要がある場合や、それぞれのニーズが異なる場合はどうすればいいですか –

+0

サーバー環境でRedisが必要なためResqueはより複雑です。 Redisをすでに使用している場合、または非常に大量のジョブを処理する必要がある場合にのみ、私はそれをお勧めします。 –

+0

Herokuの@Michael Adamは、両方を区別する[いい記事](http://adam.heroku.com/past/2010/4/13/rethinking_cron/)を書いています。 –

関連する問題