Остановить Rails от выгрузки модуля в режиме разработки

У меня есть модуль в моем приложении 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, выгружая мой модуль в конце запроса, или, в качестве альтернативы, найти другой способ аккуратно предоставить специфичную для среды конфигурацию для моих модулей.

Есть идеи?:-/

1 ответ

Решение

В вашем файле среды перед обращением к MyModule, используйте require для загрузки файла.

require 'my_module'

это обходит механизм загрузки динамических зависимостей.

Другие вопросы по тегам