Я считаю, что проблема в том, что, как Zeitwerk загружает ваш код, он сначала загружает Gems из вашего Gemfile, затем запускает инициализаторы, затем загружает код вашего приложения, поэтому попытка запустить Mynamespace::MyModel.client
означает, что он должен остановить то, что выполнить и загрузить app/lib/mynamespace/mymodel.rb
, чтобы загрузить эту константу, выполнить для нее client=
.
Это также означает, что если вы измените код Mynamespace::MyModel
, Rails не сможет выполнить горячую перезагрузку константы, поскольку инициализаторы не перезапускаются, вводится циклическая блокировка зависимостей (вы когда-нибудь видели ошибку типа «модуль MyModel удален из дерева, но все еще активен!» или вам пришлось использовать require_dependency
перед использованием некоторого кода, который должен быть загружен автоматически, но нет?). Zeitwerk пытается исправить этот класс проблем.
Переместите этот код из config/initializers
в config/application.rb
, и он все равно будет запускаться при загрузке.