We write about Ruby on Rails, React.js, React Native, remote work, open source, engineering and design.
This blog requires understanding of what is
If you are not familiar with that then
please refer to
Autoloading and Reloading Constants
article on Rails Guide.
Autoloading is not thread-safe and hence we need to make sure that all constants are loaded when application boots. The concept of loading all the constants even before they are actually needed is called "Eager loading". In a way it is opposite of "Autoloading". In the case of "Autoloading" the application does not load the constant until it is needed. Once a class is needed and it is missing then the application starts looking in "autoloading paths" to load the missing class.
eager_load_paths contains a list of directories.
When application boots
the application loads all constants
found in all directories listed in
We can add directories to
as shown below.
# config/application.rb config.eager_load_paths << Rails.root.join('lib')
With this commit Rails will no longer do Autoloading in production after it has booted.
Rails will load all the constants from
but if a constant is missing then it will not look in
autoload_paths and will not attempt to load the missing constant.
This is a breaking change for some applications. For vast majority of the applications this should not be an issue.
In the rare situation
where our application
still needs autoloading
we can enable it
by setting up
# config/application.rb config.enable_dependency_loading = true config.autoload_paths << Rails.root.join('lib')