Я использую следующую строку в инициализаторе для автозагрузки кода в моем /lib
каталоге во время разработки:
конфиг / Инициализаторы / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(из Rails 3 Quicktip: автоматическая перезагрузка папок lib в режиме разработки )
Он отлично работает, но слишком неэффективен для использования в производстве. Вместо того, чтобы загружать библиотеки при каждом запросе, я просто хочу загрузить их при запуске. В этом же блоге есть еще одна статья, описывающая, как это сделать:
конфиг / 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/**/"]
Однако, когда я переключаюсь на это, даже в процессе разработки, я получаю NoMethodErrors при попытке использовать функции 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
При Time.milli_stamp
вызове выбрасывается NoMethodError
Я понимаю, что другие отвечали на аналогичные вопросы по SO, но все они, похоже, имеют дело с соглашениями об именах и другими проблемами, о которых мне раньше не приходилось беспокоиться - мои классы lib уже работали для загрузки по запросу, я просто хочу изменить это для загрузки при запуске . Какой правильный способ сделать это?