J'utilise la ligne suivante dans un initialiseur pour charger automatiquement le code dans mon /lib
répertoire pendant le développement:
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(à partir de Rails 3 Quicktip: Rechargement automatique des dossiers lib en mode développement )
Cela fonctionne très bien, mais il est trop inefficace pour être utilisé en production. Au lieu de charger des bibliothèques à chaque demande, je veux juste les charger au démarrage. Le même blog contient un autre article décrivant comment procéder:
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/**/"]
Cependant, lorsque je passe à cela, même en cours de développement, j'obtiens NoMethodErrors lorsque j'essaie d'utiliser les fonctions lib.
Exemple d'un de mes fichiers 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
L'appel Time.milli_stamp
lancera NoMethodError
Je me rends compte que d'autres ont répondu à des questions similaires sur SO, mais ils semblent tous traiter des conventions de dénomination et d'autres problèmes dont je n'avais pas à m'inquiéter auparavant - Mes classes de lib ont déjà fonctionné pour le chargement par demande, je veux juste le changer au chargement par démarrage . Quelle est la bonne façon de procéder?