Почему мой рабочий 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?

Положите в мастера. Это довольно легко. Я предполагаю базовую настройку, это все, что вам нужно сделать

  1. устанавливать foreman драгоценный камень. (положить в пакет и сделать пакетную установку)
  2. Вы должны создать файл с именем Procfile в корне рельсов.
  3. Предполагая базовую конфигурацию, это то, что Procfile предположим, чтобы содержать

    web: bundle exec rails server
    worker: bundle exec sidekiq
    
  4. затем выполнить обе команды самопроизвольно, просто выполнить foreman start

Другие вопросы по тегам