我有一個數據庫,從行updated_at
開始30分鐘後,我想從數據庫中刪除行。我知道如何根據這段時間來查找行,但我不知道一種技術在實際時間間隔內實際刪除它。Rails 3:每30分鐘執行一次方法/腳本的方法
實現此目標的好方法是什麼?有沒有Rails-esque?
我有一個數據庫,從行updated_at
開始30分鐘後,我想從數據庫中刪除行。我知道如何根據這段時間來查找行,但我不知道一種技術在實際時間間隔內實際刪除它。Rails 3:每30分鐘執行一次方法/腳本的方法
實現此目標的好方法是什麼?有沒有Rails-esque?
Delayed Job是這樣的事情的常用工具。
你可以做一個簡單的類與perform
方法來刪除條目:
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
然後,當你決定,你的對象應該被刪除,排隊的延遲任務:
Delayed::Job.enqueue(
DeleteTheThing.new(the_thing),
:run_at => 30.minutes.from_now.getutc
)
爲什麼不使用memcached而不是你的db?然後你可以做類似
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分鐘。
,如果你不喜歡的活動記錄,你可以有一個cron任務每5分鐘左右的時間,但不能很好地擴展
mu您是否願意延遲工作而不是Resque?如果有的話,您有什麼理由選擇另一個? –
@Michael:我對Resque沒有做太多的工作,我對DJ沒有任何問題,所以「如果它沒有損壞,請不要修復」。 –