Работник Sidekiq не запускается
Я использую Sidekiq для моих фоновых заданий:
У меня есть рабочее приложение/работники/data_import_worker.rb
class DataImportWorker
include Sidekiq::Worker
sidekiq_options retry: false
def perform(job_id,file_name)
begin
#Some logic in it .....
end
end
Вызывается из файла lib/parse_excel.rb
def parse_raw_data
#job_id and #filename are defined bfr
DataImportWorker.perform_async(job_id,filename)
end
Как только я запускаю его из моего действия, рабочий не получает вызов.. Redis работает на localhost:6379
Любая идея, почему это должно происходить. Среда - это Linux.
Ответы
Ответ 1
У меня была аналогичная проблема, когда Sidekiq запускался, но когда я вызывал perform_async
, он ничего не делал, кроме return true
.
Проблема была rspec-sidekiq была добавлена в мою группу:: development,: test. Я исправил проблему, перемещая rspec-sidekiq только в группу ": test".
Ответ 2
Запустите sidekiq из корневого каталога вашего приложения Rails. Например,
bundle exec sidekiq -e staging -C config/sidekiq.yml
Ответ 3
Вам нужно указать имя очереди, в которой работает рабочий.
Пример:
sidekiq_options retry: false, : queue = > data_import_worker
data_import_worker может быть любым именем, которое вы хотите ему предоставить.
Затем, когда вы перейдете к веб-интерфейсу: yoursite.com/sidekiq, вы сможете увидеть текущих сотрудников для очереди "data_import_worker"
Ответ 4
Я столкнулся с одной и той же проблемой, оказалось, что аргумент, который я передал в функции perform_async, не подходит, кажется, что не следует передавать какой-либо результат запроса в perform_async, вы должны выполнить весь запрос в функции.
Ответ 5
Для меня, когда вы выполняете perform_later, он будет помещаться в очередь, но никогда не будет удаляться из очереди. Мне нужно было добавить мое имя очереди в файл sidekiq.yml
---
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
- default
- my_queue
Ответ 6
Потерял 15 минут. Чтобы проверить, правильно ли загружена Sidekiq ваш файл конфигурации (с именами очередей), перейдите в веб-интерфейс на вкладке "Занят", и вы найдете свой идентификатор процесса, а ниже он найдет ваши очереди.
В нашем случае у нас была ошибка с ошибкой mailer
(правильная очередь ActiveJob для Mailers mailers
, во множественном числе).
Ответ 7
Моя проблема заключалась в том, что файл рабочего файла был неверным.
Нужно быть в "project_root/app/worker/worker.rb", а не "project_root/worker/worker.rb"
Проверьте путь к файлу!
Ответ 8
Действительно ли работает несколько рабочих на автономном sidekiq?
например, у меня 2 работника:
ProccessWorker
CallbackWorker
когда я запускаю sidekiq:
bundle exec sidekiq -r./workers/proccess_worker.rb -C./config/sidekiq.yml
только один рабочий за это время.
Ответ 9
Я вызывал perform_async(23)
в рабочей консоли, однако мой sidekiq был запущен в режиме постановки.
После того, как я начал работать в режиме Sidekiq, все стало очень хорошо работать.