У меня есть этот Sidekiq работник:Как Sidekiq передает аргументы методу выполнения?
class DealNoteWorker
include Sidekiq::Worker
sidekiq_options queue: :email
def perform(options = {})
if options[:type] == "deal_watch_mailer"
deal_watchers = DealWatcher.where("deal_id = ?", options[:deal_id])
deal_note = DealNote.find(options[:deal_note_id])
current_user = User.find(options[:current_user_id])
deal_watchers.each do |deal_watcher|
unless deal_watcher.user_id == options[:current_user_id]
# Tell the DealWatchMailer to send emails to ALL watchers advising of change to deal
if deal_watcher.user.active
DealWatchMailer.deal_watch_email(deal_watcher, nil, deal_note, current_user, options[:url]).deliver
end
end
end
elsif options[:type] == "deal_note_mailer"
options[:user_ids].each do |id|
if DealWatcher.where("deal_id = ? and user_id =?", options[:deal_id], id).count == 0
deal_note = Deal.find(options[:deal_note_id])
user = User.find_by_id(id)
DealNoteMailer.deal_note_email(deal_note, user, options[:url]).deliver
end
end
end
end
end
я прохожу хэш методу perform_async
, но я думаю, что параметры Все передаваемые методу perform
не одного и того же типа, как и те, передаются perform_async
. Я попробовал пользователю logger.info
и p
для отладки моей проблемы, но ничего не выводилось ...
Проблема в том, что задание добавляется в очередь электронной почты, но никогда не обрабатывается. Я даже пытался вызвать исключение в методе perform
(на первой строке метода), но ничего не выводится либо ...
Я знаю, как факт, что следующий рабочий работает:
class DealNoteWorker
include Sidekiq::Worker
def perform(deal_id, deal_note_id, current_user_id, url)
deal_watchers = DealWatcher.where("deal_id = ?", deal_id)
deal_note = DealNote.find(deal_note_id)
current_user = User.find(current_user_id)
deal_watchers.each do |deal_watcher|
unless deal_watcher.user_id == current_user_id
# Tell the DealWatchMailer to send emails to ALL watchers advising of change to deal
if deal_watcher.user.active
DealWatchMailer.deal_watch_email(deal_watcher, nil, deal_note, current_user, url).deliver
end
end
end
end
end
Таким образом, проблема заключается в хэш-параметре (опции). Что я делаю неправильно?
Вы уверены, что начали работу sidekiq? Запустите 'bundle exec sidekiq' в другом терминале. Кроме того, вы используете очередь под названием 'email', поэтому вам нужно запустить' sidekiq -q email'. –
Да, это была проблема. Мне нужно было запустить sidekiq с электронной почтой. Поэтому я добавил список очередей в файле конфигурации sidekiq.yml и устранил проблему. Не могли бы вы добавить свой комментарий в качестве ответа, чтобы я мог его принять? –