Автозагрузка работает нормально, пока класс в вашем файле - это класс, который только определен в этом файле. Он не работает, если вы хотите заново открыть существующий класс (изначально определенный в стандартном Ruby, Rails или другой библиотеке) и каким-то образом настроить его.
Пример проблемы:
Вот пример файла в lib /, который никогда не будет загружен автоматически:
lib/active_record/base_extensions.rb
:
ActiveRecord::Base # make sure ActiveRecord::Base is loaded
module ActiveRecord::Base::Extensions
# some methods here
end
class ActiveRecord::Base
include ActiveRecord::Base::Extensions
end
Этот файл открывает заново ActiveRecord::Base
и добавляет некоторые методы к этому классу.
Что может вызвать автозагрузку этого файла ?? Ничего такого! Автоматическая загрузка основана на константах, а константа ActiveRecord::Base
уже загружена (из гема activerecord
).
Таким образом, ссылка на константу ActiveRecord::Base
в вашем приложении не приведет к автоматической загрузке этого конкретного файла.
Обход:
Это то, что я делаю, чтобы все мои Ruby-файлы в lib/
требовали:
Добавить новый инициализатор с именем config/initializers/require_files_in_lib.rb
с таким содержанием:
Dir[Rails.root + 'lib/**/*.rb'].each do |file|
require file
end