2015-12-11 49 views
0

我目前使用活動作業/ Resque從外部API中拉出。它完美的作品,但我希望它在用戶登錄時週期性地從api中拉出(並更新記錄)。Rails 4 - 活動作業:僅在用戶登錄時運行作業

Devise提供了我似乎無法使用的current_user方法,而且我似乎無法檢查會話打破循環。如果我把邏輯放在控制器中,那麼它會影響頁面加載等,這會影響目的。

基本上,這就是我想做的事:

class PullApiJob < ActiveJob::Base 
    queue_as :default 

    def perform(current_user, info) 
    while current_user 
     #Logic to pull info from api and save into Info record 
     sleep(200) 
    end 
    end 
end 
+0

至於我KNW,'current_user'是一些東西,是唯一可用的控制器。您應該使用用戶標識排隊作業,然後在作業中創建用戶對象並執行任何您想要的操作。 –

+0

你是正確的,只有控制器可以使用current_user。這是問題的根源。檢查current_user並輪詢用戶會話在我的測試中是不可能的,所以我不知道如何在用戶登錄時遞增執行任務。 – socialconquest

回答

1

如何檢查會話時間的每個請求,並存儲在數據庫中。添加session_timeout_at

爲每一個請求,

if current_user && DateTime.now > current_user.session_timeout_at 
    current_user.update(session_timeout_at: DateTime.now + session_duration) 
    # session_duration => session expire duration, ex) 30.minutes 
end 

你的工作

class PullApiJob < ActiveJob::Base 
    queue_as :default 

    def perform(current_user, info) 
    while current_user.session_timeout_at > DateTime.now do 
     # Your Logic 
     sleep(200) 
     current_user.reload # <- Must reload for check updated session_timeout_at 
    end 
    end 
end 
+0

我將嘗試修改此版本。正如所寫的,它會使活動用戶的會話過期。目前設計提供:可超時,所以我會嘗試解決這個問題,使用相同的概念。 – socialconquest