Why doesn't Rails autoload classes from app/services?

I encountered the same problem and it seems to be a caching issue with Spring, a process which handles preloading your app. It's used for the web server as well as the console and Rake tasks.

Stopping Spring with bin/spring stop will force Spring to load your app fresh. Now running rails console and inspecting ActiveSupport::Dependencies.autoload_paths will successfully show app/services.


In my case spring was not watching the app/services directory for changes - restarting Spring would load the class but changes to an existing class or new class would require a restart of Spring for them to apply.

To resolve this issue I added it to the list of directories watched by Spring in config/spring.rb:

%w(
  .ruby-version
  .rbenv-vars
  tmp/restart.txt
  tmp/caching-dev.txt
  app/services
).each { |path| Spring.watch(path) }

and restarted Spring one more time.


I came with a similar problem, and took a quick glance at the Spring docs and found this bit about watchers.

I added the following to my application.rb and things fell into place -

Spring.watch "app/services/**"

I'm no expert here, ymmv.