Остановить 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'
это обходит механизм загрузки динамических зависимостей.