用户注销时停止 sidekiq 工作器 [英] Stop sidekiq worker when user logs out
问题描述
我只想在用户登录时执行后台作业.当用户登录时,我启动一个worker:
I only want to perform the background job when the user is logged in. When the user is logged in, I start a worker:
Warden::Manager.after_authentication do |user,auth,opts|
ImapWorker.perform_async(user.id)
end
我的 ImapWorker 所做的就是使用 ruby 的 Net::Imap
API 来等待来自远程电子邮件服务器的新电子邮件.它使用 Imap 的空闲功能来等待新事件.
All my ImapWorker does is use ruby's Net::Imap
API to wait for new emails to come in from a remote email server. It uses Imap's idle functionality to wait for new events.
class ImapWorker
include Sidekiq::Worker
def perform(user_id)
user = User.find(user_id)
imap = Net::IMAP.new('imap.gmail.com',993,true)
imap.login(user.email, user.password)
imap.select('INBOX')
imap.add_response_handler do |resp|
if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
check_email
end
end
imap.idle
end
end
现在,当我的用户注销时,我想结束工作人员.我知道在 devise
中,我可以像这样挂钩注销功能:
Now when my user logs out, I want to end the worker. I know in devise
, I can hook into the log out functionality as such:
Warden::Manager.before_logout do |user,auth,opts|
...
end
但是我到底要如何阻止 sidekiq 工人?
But how exactly do I stop the sidekiq worker?
推荐答案
require 'sidekiq/api';Sidekiq::ProcessSet.new.each(&:stop!)
这篇关于用户注销时停止 sidekiq 工作器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!