Я только хочу, чтобы выполнить фоновое задание, когда пользователь вошел в систему Когда пользователь вошел в систему, я начинаю рабочий:.Stop sidekiq работника, когда пользователь выходит из
Warden::Manager.after_authentication do |user,auth,opts|
ImapWorker.perform_async(user.id)
end
Все мои ImapWorker делает использование ruby's Net::Imap
API, чтобы ждать появления новых писем с удаленного сервера электронной почты. Он использует функциональность Idap для ожидания новых событий.
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
, я могу подключить в бревно из функциональности, как например:
Warden::Manager.before_logout do |user,auth,opts|
...
end
Но как именно я останавливаю sidekiq работника?
Будет ли это остановить все работник или только работник, связанный с пользователем? Я только хочу остановить работника, связанного с пользователем. – Donato
Sidekiq не предназначен для ожидания и ответа на события с заданиями, которые работают вечно. Он только ждет рабочих мест в Redis, и эти задания должны заканчиваться, а не приостанавливаться. Вы не можете делать то, что хотите сделать с Sidekiq. –
У вас есть рекомендации, что я могу использовать в Rails для фонового опроса imap? – Donato