Остановка кэша цепочек изменений в конфигурации инициализатора
У меня есть драгоценный камень, который я пытался сделать настраиваемым. Цель состоит в том, чтобы в файле инициализатора был установлен блок конфигурации, позволяющий разработчику настраивать точки останова media_query в файле gems scss.
Мой класс конфигурации выглядит так
# my_gem/lib/my_gem/configuration.rb
module MyGem
class << self
attr_accessor :configuration
end
def self.configure
self.configuration ||= Configuration.new
yield(configuration)
end
class Configuration
attr_accessor :med_pixel_width, :lrg_pixel_width
def initialize
@med_pixel_width = 600
@lrg_pixel_width = 1024
end
end
end
Я создал генератор, который работает нормально rails g my_gem
который создает следующий файл инициализатора с блоком cofig
# config/initializers/my_gem.rb
MyGem.configure do |config|
config.med_pixel_width = 768
config.lrg_pixel_width = 1024
end
И тогда в моей таблице стилей драгоценных камней я ловлю конфигурацию
# app/assets/stylesheets/my_gem/my_style.scss.erb
@media only screen and (min-width: <%= MyGem.configuration.med_pixel_width %>px ) {
.styles {
color: red;
}
}
После запуска bundle и включения файлов ресурсов gems css в application.css моего тестового приложения я вижу, что стили в браузере применяются должным образом. И конфигурация работает. НО только при первом запуске сервера. После того, как я пытаюсь изменить конфигурацию снова, никаких изменений не происходит.
Я обнаружил, что кэширование звездочек является виновником. Я подтвердил, добавив rake tmp:clear
прямо над моим блоком конфигурации, и тогда все работает всякий раз, когда я перезагружаю сервер, я вижу происходящие изменения
# config/initializers/my_gem.rb
system `rake tmp:clear`
MyGem.configure do |config|
config.med_pixel_width = 768
config.lrg_pixel_width = 1024
end
Мой вопрос: есть ли какое-то другое простое решение, которое я здесь упускаю? И если нет... ставит это rake tmp:clear
в моем файле инициализатора плохая практика? Потенциально ли это замедлит рабочий процесс среды разработки для разработчиков, использующих гем?