В моем приложении на Rails есть модуль, который находится в / lib
module MyModule
mattr_accessor :the_variable
class << self
def setup
yield this
end
end
end
Из моего environments/#{RAILS_ENV}.rb
файла я могу затем установить значение для окружающей среды для the_variable
:
MyModule.setup do |my_module_config|
my_module_config.the_variable = 42
end
Это прекрасно, и, кажется, работает (почти) нормально.
Проблема в том, что в режиме разработки Rails через ActiveSupport::Dependencies
выгружает загрузку модулей и перезагружает их вовремя для нового запроса. Обычно это отличное поведение, потому что это означает, что вам не нужно перезагружать сервер localhost при внесении изменений в код.
Однако это также очищает мою инициализированную переменную the_variable
, и когда следующий запрос поступает в инициализатор (очевидно), он больше не запускается. В результате у последующих запросов MyModule.the_variable
устанавливается nil
, а не 42
, который я ищу.
Я пытаюсь выяснить, как остановить Rails, выгружая мой модуль в конце запроса, или, в качестве альтернативы, найти другой способ аккуратно предоставить специфическую для окружающей среды конфигурацию для моих модулей.
Есть идеи? : - /