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