Конфигурация Rails и переменные класса
У меня есть простой класс, используемый для хранения конфигурации для изображений по умолчанию:
class DefaultImages
class <<self
attr_accessor :format
attr_accessor :directory
attr_accessor :width
attr_accessor :height
end
def self.setup
yield self
end
end
Я заполняю это в инициализаторе:
DefaultImages.setup do |config|
config.format = :png
config.directory = 'default'
config.width = 2161
config.height = 1441
end
Если я зарегистрирую атрибуты здесь, в аксессоре, все будут заполнены:
Rails.logger.warn "Default Image Format: #{DefaultImages.format}" # png
Тем не менее, когда я получаю доступ к атрибутам DefaultImages
позже в приложении они все nil
, То же самое верно, если я получаю доступ к его атрибутам из консоли.
Там нет другого кода, который касается DefaultImages
кроме доступа к его атрибутам после запуска инициализатора. Я явно перезапустил сервер и т. Д.
Почему его атрибуты могут быть нулевыми?
2 ответа
Вы должны включить Singleton
модуль в вашем классе:
require 'singleton'
class DefaultImages
include Singleton
class <<self
attr_accessor :format
attr_accessor :directory
attr_accessor :width
attr_accessor :height
end
def self.setup
yield self
end
end
Так что проблема заключается в перезагрузке класса, которая выключена в разработке. Это означает, что классы перезагружаются при обновлении браузера, что означает, что состояние, сохраненное в этих классах, сдувается.