Rails 4 - 活动作业:仅在用户登录时运行作业

时间:2015-12-11 23:26:42

标签: ruby-on-rails devise resque rails-activejob

我目前正在使用Active Job / Resque从外部api中提取。它工作得很好但我希望它在用户登录时定期从api(并更新记录)中拉出来。

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 

1 个答案:

答案 0 :(得分:0)

如何在db中检查每个请求和存储的会话时间。添加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