Остановить Rails от выгрузки модуля в режиме разработки - PullRequest
4 голосов
/ 10 марта 2010

В моем приложении на 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 Ответ

10 голосов
/ 11 марта 2010

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

require 'my_module'

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

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