2011-11-14 69 views
0

我有一個數據庫,從行updated_at開始30分鐘後,我想從數據庫中刪除行。我知道如何根據這段時間來查找行,但我不知道一種技術在實際時間間隔內實際刪除它。Rails 3:每30分鐘執行一次方法/腳本的方法

實現此目標的好方法是什麼?有沒有Rails-esque?

回答

1

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 
) 
+0

mu您是否願意延遲工作而不是Resque?如果有的話,您有什麼理由選擇另一個? –

+0

@Michael:我對Resque沒有做太多的工作,我對DJ沒有任何問題,所以「如果它沒有損壞,請不要修復」。 –

0

爲什麼不使用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分鐘左右的時間,但不能很好地擴展

1

最好的選擇是使用Resque這就像延遲工作,但更好,更簡單。 here是簡單的教程開始。您可以將Cron設置爲30分鐘的間隔。

+0

它在哪些方面很簡單。畝的例子很簡單。我想了解兩者之間的差異,如果我應該選擇學習,或者每個人都更好地匹配不同的需求 –

+0

Resque更復雜,因爲它需要在您的服務器環境中使用Redis。如果您已經在使用Redis,我只會推薦它,或者您需要處理大量的作業。 –

+0

@ Heroku的邁克爾亞當寫了一篇[漂亮的文章](http://adam.heroku.com/past/2010/4/13/rethinking_cron/),區分兩者。 –