Eu uso a seguinte linha em um inicializador para carregar automaticamente o código no meu /lib
diretório durante o desenvolvimento:
config / inicializadores / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(da dica rápida do Rails 3: recarregar automaticamente as pastas lib no modo de desenvolvimento )
Funciona muito bem, mas é muito ineficiente para usar na produção. Em vez de carregar bibliotecas em cada solicitação, eu só quero carregá-las na inicialização. O mesmo blog possui outro artigo que descreve como fazer isso:
config / application.rb:
# Custom directories with classes and modules you want to be autoloadable.
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]
No entanto, quando mudo para isso, mesmo em desenvolvimento, recebo NoMethodErrors ao tentar usar as funções lib.
Exemplo de um dos meus arquivos lib:
lib / extensions.rb:
Time.class_eval do
def self.milli_stamp
Time.now.strftime('%Y%m%d%H%M%S%L').to_i
end
end
A chamada Time.milli_stamp
lançará NoMethodError
Sei que outras pessoas responderam perguntas semelhantes no SO, mas todas parecem lidar com convenções de nomenclatura e outros problemas com os quais eu não precisava me preocupar antes. Minhas aulas de lib já funcionavam para carregamento por solicitação, só quero mudar para carregar por inicialização . Qual é o caminho certo para fazer isso?