私は、行updated_at
から30分後にデータベースから行を削除したいと思っています。私はこの時間に基づいて行を見つける方法を知っていますが、実際に時間間隔で削除する方法はわかりません。Rails 3:30分ごとにメソッド/スクリプトを実行する方法
これを達成するにはどのような方法が良いですか? Rails風のものがありますか?
私は、行updated_at
から30分後にデータベースから行を削除したいと思っています。私はこの時間に基づいて行を見つける方法を知っていますが、実際に時間間隔で削除する方法はわかりません。Rails 3:30分ごとにメソッド/スクリプトを実行する方法
これを達成するにはどのような方法が良いですか? Rails風のものがありますか?
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
方法で単純なクラスを作ることができます
なぜあなたのデータベースの代わりに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ジョブを持つことができ、それがうまく
それはどんな点ではより単純です。 muの例はかなり簡単です。私は2つの違いについて学びたいと思っています。学習するために選択する必要がある場合や、それぞれのニーズが異なる場合はどうすればいいですか –
サーバー環境でRedisが必要なためResqueはより複雑です。 Redisをすでに使用している場合、または非常に大量のジョブを処理する必要がある場合にのみ、私はそれをお勧めします。 –
Herokuの@Michael Adamは、両方を区別する[いい記事](http://adam.heroku.com/past/2010/4/13/rethinking_cron/)を書いています。 –
muあなたはResqueよりも遅れた仕事を好んでいますか? –
@Michael:私はResqueであまり仕事をしていませんでした。私はDJに何の問題もなかったので、 "それが壊れていなければ、それを修正しないでください"。 –