Deekor
Deekor

Reputation: 9499

uninitialized constant sidekiq worker

New rails project.

Rails 5.0.2 Sidekiq 4.2.10

I ran rails g sidekiq:worker deposit_collector and then filled out the code I needed inside the perform method.

To test I logged into the rails console and typed: DepositCollector.perform_async and I get the error:

NameError: uninitialized constant DepositCollectorWorker

The worker is where it should be in the app/workers/ folder. I've used sidekiq on several projects before and have never run into this.

Upvotes: 11

Views: 10454

Answers (2)

Aymen Bou
Aymen Bou

Reputation: 1109

I didn't have spring installed so I took the lazy approach and turned on eager loading in my config/environments/development.rb file:

config.eager_load = true

and then turned it back to false after restarting my server.

Upvotes: 3

cschroed
cschroed

Reputation: 6834

By default, Rails will include all subdirectories of the app folder in the autoload paths list. You can review the list of autoload paths in the console with:

puts ActiveSupport::Dependencies.autoload_paths

But Rails only looks for these paths at boot time. So when you add a new folder, like app/workers, it is not enough to restart the Rails console. You need to both exit the Rails console and stop the Spring Application Preloader with:

spring stop

Then start up the Rails console again and the files in the app/workers folder will load properly.

Upvotes: 33

Related Questions