Ich verwende die folgende Zeile in einem Initialisierer, um Code in meinem /lib
Verzeichnis während der Entwicklung automatisch zu laden :
config / initializers / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(aus Rails 3 Quicktip: Lib-Ordner im Entwicklungsmodus automatisch neu laden )
Es funktioniert gut, ist aber zu ineffizient, um es in der Produktion zu verwenden. Anstatt bei jeder Anforderung Bibliotheken zu laden, möchte ich sie nur beim Start laden. Im selben Blog gibt es einen weiteren Artikel, in dem beschrieben wird, wie das geht:
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/**/"]
Wenn ich jedoch auch in der Entwicklung dazu wechsle, erhalte ich NoMethodErrors, wenn ich versuche, die lib-Funktionen zu verwenden.
Beispiel einer meiner lib-Dateien:
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
Beim Aufruf Time.milli_stamp
wird NoMethodError ausgelöst
Mir ist klar, dass andere ähnliche Fragen zu SO beantwortet haben, aber alle scheinen sich mit Namenskonventionen und anderen Problemen zu befassen, über die ich mir vorher keine Sorgen machen musste. Meine lib-Klassen haben bereits für das Laden pro Anfrage funktioniert , ich möchte sie nur ändern zum Laden pro Start . Was ist der richtige Weg, um dies zu tun?