Utilizo la siguiente línea en un inicializador para cargar automáticamente el código en mi /lib
directorio durante el desarrollo:
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(de Rails 3 Quicktip: recarga automática de carpetas lib en modo de desarrollo )
Funciona muy bien, pero es demasiado ineficiente para usar en producción: en lugar de cargar libs en cada solicitud, solo quiero cargarlas al inicio. El mismo blog tiene otro artículo que describe cómo hacer esto:
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/**/"]
Sin embargo, cuando cambio a eso, incluso en el desarrollo, obtengo NoMethodErrors cuando intento usar las funciones lib.
Ejemplo de uno de mis archivos 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
Llamar Time.milli_stamp
arrojará NoMethodError
Me doy cuenta de que otros han respondido preguntas similares sobre SO, pero todos parecen tratar con convenciones de nomenclatura y otros problemas de los que no tenía que preocuparme antes: mis clases de lib ya funcionaban para cargar por solicitud, solo quiero cambiarlo a la carga por inicio . ¿Cuál es la forma correcta de hacer esto?