Я використовую наступний рядок в ініціалізаторі для автоматичного завантаження коду в моєму /lib
каталозі під час розробки:
config / ініціалізатори / custom.rb:
RELOAD_LIBS = Dir[Rails.root + 'lib/**/*.rb'] if Rails.env.development?
(з Rails 3 Quicktip: Автоматичне перезавантаження папок lib в режимі розробки )
Це чудово, але це занадто неефективно для використання у виробництві. Замість того, щоб завантажувати ваги на кожен запит, я просто хочу завантажити їх під час запуску. У тому ж блозі є ще одна стаття, що описує, як це зробити:
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/**/"]
Однак, коли я переходжу на це, навіть у процесі розвитку, я отримую NoMethodErrors при спробі використання функцій lib.
Приклад одного з моїх файлів 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
Я усвідомлюю, що інші відповіли на подібні запитання щодо ТА, але всі вони, мабуть, мають справу з умовами іменування та іншими питаннями, про які раніше мені не довелося переживати. Мої класи ліб вже працювали для завантаження за запитом, я просто хочу це змінити для початку завантаження. Який правильний спосіб зробити це?