Я реализую одноэлементный класс / модуль в приложении Rails 6 с помощью загрузчика Zeitwerk.
# app/lib/mynamespace/mymodel.rb
module Mynamespace
module Mymodel
class << self
attr_accessor :client
end
def self.client
@client ||= "default_value"
end
def self.client=(client)
@client = client
end
end
Класс Singleton инициализируется в
# config/initializers/mymodel.rb
Mynamespace::Mymodel.client = "my_custom_value"
# Mynamespace::Mymodel.client - this returns correct value
Затем, когда я использую одноэлементный класс в контроллере
# app/controllers/mycontroller.rb
client = Mynamespace::Mymodel.client
он возвращает пустой объект, поскольку он не был инициализирован: client == "default_value", но должен быть "my_custom_value".
Журнал показывает ошибки
DEPRECATION WARNING: Initialization autoloaded the constants Mynamespace::Mymodel
Autoloading during initialization is going to be an error condition in future versions of Rails.
Как правильно настроить одноэлементный класс при использовании Zeitwerk?