Uso la seguente riga in un inizializzatore per caricare automaticamente il codice nella mia /lib
directory durante lo sviluppo:
config / inizializzatori / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(da Rails 3 Quicktip: ricarica automaticamente le cartelle lib in modalità sviluppo )
Funziona benissimo, ma è troppo inefficiente da utilizzare in produzione. Invece di caricare librerie su ogni richiesta, voglio solo caricarle all'avvio. Lo stesso blog ha un altro articolo che descrive come eseguire questa operazione:
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/**/"]
Tuttavia, quando passo a quello, anche in fase di sviluppo, ottengo NoMethodErrors quando provo ad usare le funzioni lib.
Esempio di uno dei miei file 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
La chiamata Time.milli_stamp
genererà NoMethodError
Mi rendo conto che altri hanno risposto a domande simili su SO, ma tutti sembrano occuparsi di convenzioni di denominazione e di altri problemi di cui non dovevo preoccuparmi prima- Le mie classi lib già funzionavano per il caricamento per richiesta, voglio solo cambiarlo al caricamento all'avvio . Qual è il modo giusto per farlo?