Autoload vs Eagerload

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