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