Fd779852eb8e519999f8b35c47777608

如何讓delayed_job有條件地重覆執行

2012-02-23 23:01:50 +0800chiayiGem 節點 中發起
最後由 chiayi2012-02-29 09:43:52 +0800回應 , 279次閱讀

有個Job是需要去其它主機抓資料,有可能該主機還在處理中
需要過幾秒再query一次
想利用delayed_job去處理

試過在method中raise,它會直接跳出,該job就當作完成,並不是預期地繼續留在queue
請問有解嗎?

謝謝

截至 2012-02-29 09:43:52 +0800,共收到 4 條回應
0483666667da0ede142e86a3cc190d22
ShiningRay 1樓, 於2012-02-24 14:10:49 +0800回應

週期性的事務,可以考慮用whenever http://github.com/javan/whenever
週期性掃描單獨的jobs表,完成的記錄便刪除

0483666667da0ede142e86a3cc190d22
ShiningRay 2樓, 於2012-02-24 14:12:38 +0800回應

delayed_job應該會保留出錯的job吧?看看配置是否正確

Fd779852eb8e519999f8b35c47777608
chiayi 3樓, 於2012-02-27 19:04:54 +0800回應

hi @ShiningRay
因為我想讓job儘可能快一點完成,所以比較傾向在after_create後delay執行

我測試在model裡寫一個method如下,直接raise
delayed_job還是當作它完成,刪除該job
# in controller

@object.delay.getDataFromRemoteServer

# in model

def getDataFromRemteServer
  raise RuntimeError
end

請問是哪裡有問題?
謝謝

Fd779852eb8e519999f8b35c47777608
chiayi 4樓, 於2012-02-29 09:43:52 +0800回應

hi all
我改用resque,跑5個workers,速度明顯比提昇,又可以debug,太好用了

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊