Переменная класса Ruby сбрасывается после инициализации приложения rails - PullRequest
2 голосов
/ 15 июня 2010

Я пытался присвоить статическую переменную класса, например,

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.Там есть какая-то магия?

1 Ответ

4 голосов
/ 15 июня 2010

Зависит от того, работаете ли вы в среде разработки, классы загружаются по запросу, поэтому вы можете вносить в них изменения и просматривать их, не перезагружая сервер.

Так что я думаю, что ваша переменная класса будет сбрасываться для каждого запроса.

Попробуйте запустить в работе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...