Я пытался присвоить статическую переменную класса, например,
class QueryLogger < Logger
@@query_logger_default_instance = nil
def self.default_instance
# Use global variable because static variable doesn't work
@@query_logger_default_instance ||= self.new(STDOUT)
end
end
В папке инициализаторов моего приложения rails я добавил файл с этим блоком кода
ActiveRecord::Base.logger = QueryLogger.default_instance
В запрос(действие контроллера), я звоню по этому поводу: QueryLogger.default_instance
.
Я предполагаю, что вызов default_instance всегда будет сообщать об одном и том же.Однако это не так.
Теперь я пытаюсь наблюдать за вещами в NetBeans, устанавливая точку останова внутри default_instance.Как и ожидалось, default_instance вызывается дважды, один из-за блока инициализатора и один из-за вызова моего действия. Удивительно В обоих случаях @@ query_logger_default_instance сообщает ноль внутри инспектора NetBeans.Первый нулевой отчет верен, но второй потряс меня.Похоже, что статическая переменная сбрасывается после инициализации приложения rails.Там есть какая-то магия?