![Autoload vs Eagerload](/assets/img/autoload_vs_eagerload.png)
Dúvida inicial
Tenho visto muitas dúvidas sobre quando utilizar require
por exemplo em um controller ou como especificar no Rails para uma classe ser
carregada automaticamente.
Outro ponto importante é como conseguir testar o local de uma forma que também funcione em produção.
Como funciona no Rails
Tudo o que estiver dentro do path /app
será carregado automaticamente
através do autoload
.
Para versões mais novas do Rails podemos utilizar o zeitwerk que carrega os arquivos de uma forma mais inteligente.
Mas para versões mais antigas (anterior a 5) temos que tomar cuidado ao utilizar o autoload ou eagerload.
Com isso geralmente temos que nos preocupar com essa parte quando for necessário carregar diferentes arquivos dentro do diretório /lib.
Comportamento dependente do ambiente
O ambiente de desenvolvimento tem um carregamento de arquivos diferente do de produção com isso fica complicado de testar caso não haja um ambiente de pré produção para testar se o carregamento está correto.
As duas opções para definir dentro de config/application.rb
são:
config.autoload_paths << Rails.root.join('lib')
Porém é necessário passar o path de cada arquivo.
config.eager_load_paths << Rails.root.join('lib')
Que irá carregar tudo o que existe dentro de /lib
Como testar
Uma forma de destar o carregamento de um arquivo em
desenvolvimento é executar o RAILS_ENV=production rails c
e quando o console
carregar basta chamar o nome da classe ou módulo criado.
RAILS_ENV=production rails c