Auto-loading lib files in Rails 4 Auto-loading lib files in Rails 4 ruby-on-rails ruby-on-rails

Auto-loading lib files in Rails 4


I think this may solve your problem:

  1. in config/application.rb:

    config.autoload_paths << Rails.root.join('lib')

    and keep the right naming convention in lib.

    in lib/foo.rb:

    class Fooend

    in lib/foo/bar.rb:

    class Foo::Barend
  2. if you really wanna do some monkey patches in file like lib/extensions.rb, you may manually require it:

    in config/initializers/require.rb:

    require "#{Rails.root}/lib/extensions" 

P.S.


Though this does not directly answer the question, but I think it is a good alternative to avoid the question altogether.

To avoid all the autoload_paths or eager_load_paths hassle, create a "lib" or a "misc" directory under "app" directory. Place codes as you would normally do in there, and Rails will load files just like how it will load (and reload) model files.


This might help someone like me that finds this answer when searching for solutions to how Rails handles the class loading ... I found that I had to define a module whose name matched my filename appropriately, rather than just defining a class:

In file lib/development_mail_interceptor.rb (Yes, I'm using code from a Railscast :))

module DevelopmentMailInterceptor  class DevelopmentMailInterceptor    def self.delivering_email(message)      message.subject = "intercepted for: #{message.to} #{message.subject}"      message.to = "myemail@mydomain.org"    end  endend

works, but it doesn't load if I hadn't put the class inside a module.