In the sidekiq documentation, there is this quote about preferring to use /app/lib
instead of /lib
in Rails projects related to autoloading errors:
A lib/ directory will only cause pain. Move the code to app/lib/ and make sure the code inside follows the class/filename conventions.
Additionally, there is also:
Don't configure extra paths in autoload_paths or eager_load_paths. That's a hack; follow the conventions! Any directory underneath app/ may contain Ruby code, you don't need to explicitly configure anything.
My questions are:
Is there any truth to these statements that using /app/lib
is better than /lib
?
Is this only helpful for autoloading Rails-related objects (such as AR models, controllers, jobs, etc)? Or will it also help POROs?
Is there only a specific context in which these comments make sense?
In my experience app/lib
is easier to use. You can literally stick in something like Class MathFunction
and use it elsewhere (e.g. controllers or modules) with MathFunction.sqrRoot
.
To use /lib
you need to configure your Rails app with autoload_paths
. autoload_paths
also need some tweaking to work properly in production. Matz himself discourages autoload
because it's in the process of being deprecated.
The only time I've needed to use the lib
directory is for making custom rake tasks. Otherwise I stick to app/lib
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With