用户注销时停止 sidekiq 工作器 [英] Stop sidekiq worker when user logs out

查看:51
本文介绍了用户注销时停止 sidekiq 工作器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只想在用户登录时执行后台作业.当用户登录时,我启动一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆