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

Я сохраняю значение в переменной класса внутри модуля, например:

module TranslationEnhancer
  def self.install! klass
    @dictionaries ||= [] << klass
  end
  ...
end

Я вызываю это из инициализатора в config / initializers:

require Rails.root + "lib" + "translation_enhancer.rb"
TranslationEnhancer::install! TranslationDictionary

Теперь, если я начну сервер в среде разработки, при первом запросе все нормально. Однако после этого запроса @Dictionaries внезапно обнуляются. Я прокомментировал весь другой код в TranslationEnhancer, поэтому я абсолютно уверен, что весь модуль должен перезагружаться каждый раз, когда я делаю запрос.

Я попытался переместить модуль за пределы каталога lib (переместил его в lib_unloadable), затем я попробовал:

ActiveSupport::Dependencies.explicitly_unloadable_constants << "TranslationEnhancer" 

, но снова не удалось. Я понятия не имею, как решить эту проблему, пожалуйста, помогите.

Получил Ruby 1.9.2 @ Rails 3.1.rc4.

РЕДАКТИРОВАТЬ: Я знаю, что могу установить словари как константу. Но я хотел бы использовать TranslationEnhancer в качестве библиотеки, чтобы я мог использовать его без изменений в другом проекте и устанавливать разные каталоги, например:

TranslationEnhancer.install! EnglishDirectory, FrenchDirectory

Эти значения не изменятся во время выполнения, они просто изменят проект на проект.

7
задан Jan Minárik 29 July 2011 в 20:33
поделиться