Почему мой рабочий Rails не выполняется?
Я использую Rails 5.0.1 на Mac OS X. Я только что установил Redis с помощью homebrew, и у меня есть это в моем Gemfile
gem 'sidekiq'
и у меня есть этот файл, app/worker /run_crawlers_worker.rb, ...
class MyWorker
include Sidekiq::Worker
def perform()
puts "about to fire up service ..."
svc = MyService.new
svc.do_tasks
puts "done invoking call"
end
end
В месте в моем веб-приложении у меня есть
MyWorker.perform_async()
хотя я уверен, что вышеперечисленное вызывается, я не вижу ни одного из моих методов "execute" в моем работнике, вызываемом (я не вижу ни одного из hte put output и не вижу результатов "do_tasks" "метод выполняется в моей базе данных). Есть ли что-то, что мне нужно настроить, чтобы вызвать мой метод?
2 ответа
Скорее всего, у вас не запущен sidekiq, я бы порекомендовал изучить Foreman, который можно настроить для одновременного запуска всех ваших ожидаемых процессов (сервера Rails, рабочих, Redis и т. Д.).
Есть ли что-то, что мне нужно настроить, чтобы вызвать мой метод?
Вам нужен процесс sidekiq, работающий в фоновом режиме, который будет отвечать за выполнение заданий, которые вы ставите в очередь.
Есть ли способ заставить "bundle exec sidekiq" автоматически запускаться, когда я запускаю свой сервер Rails?
Положите в мастера. Это довольно легко. Я предполагаю базовую настройку, это все, что вам нужно сделать
- устанавливать
foreman
драгоценный камень. (положить в пакет и сделать пакетную установку) - Вы должны создать файл с именем
Procfile
в корне рельсов. Предполагая базовую конфигурацию, это то, что
Procfile
предположим, чтобы содержатьweb: bundle exec rails server worker: bundle exec sidekiq
затем выполнить обе команды самопроизвольно, просто выполнить
foreman start