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

Rails 4 - Active Job: Run Job Only When User Is Signed In

我目前正在使用 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 

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