waynard
waynard

Reputation: 83

Rails 5.2 and Sidekiq: Can't find Worker Class

I have a worker named release_monitor_worker.rb saved under app/workers/. That looks like this:

class ReleaseMonitorAddWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  require 'watir'
  require 'nokogiri'
  require 'open-uri'

  def parse_url(url)
    puts "Beginning navigation to #{url}"
    browser = Watir::Browser.new :chrome, headless: true
    browser.goto url
    puts "Succesfully navigated!"
    Nokogiri::HTML.parse(browser.html)
  end

  def perform
    doc = parse_url(URL)
    count = doc.xpath('/html/body/div[9]/div/div/div/div/div[2]/div[2]/div[1]/div/div[1]/h1/span')
    count.tr('()', '')
    binding.pry
  end
end

I then call this worker from my NewReleasesController (named new_releases_controller.rb) like so:

class NewReleasesController < ApplicationController
  def index
    ReleaseMonitorAddWorker.perform_async
  end
end

I fire up redis, then sidekiq, and then run rails s. I get the following error when triggering that controller method: uninitialized constant NewReleasesController::ReleaseMonitorAddWorker

What's going on here?

Upvotes: 1

Views: 1283

Answers (1)

Marek Lipka
Marek Lipka

Reputation: 51151

There's a mismatch between your class name (ReleaseMonitorAddWorker) and containing file name (release_monitor_worker.rb). Either rename your file to release_monitor_add_worker.rb or your class to ReleaseMonitorWorker and it will work.

Upvotes: 3

Related Questions