Использование Rails 6.0.2.1 с Ruby 2.6.3 и NGINX У меня есть задача rake, которая выполняет задачу перекомпиляции ресурсов при их изменении на рабочем сервере
#Called by delayed job UpdateAssetsJob
require 'rake'
desc "Applying Theme, will restart server and may take a while!"
task :apply_css => :environment do
Rails.logger.info("Applying CSS in #{Rails.env}")
if Rails.env == "production"
Rails.logger.info("Compiling Assets")
Rake::Task['assets:precompile'].invoke
Rake::Task['assets:precompile'].reenable
# `RAILS_ENV=production rails assets:precompile`
Rails.logger.info("Cleaning assets - busting cache")
Rake::Task['assets:clean'].invoke
Rake::Task['assets:clean'].reenable
# `RAILS_ENV="production" rake assets:clean`
Rails.logger.info("Restarting Puma server")
`bundle exec pumactl -S /home/app_path/shared/tmp/pids/puma.state -F /home/app_path/shared/puma.rb restart`
end
end
Проблема это означает, что ресурсы будут скомпилированы только один раз.
Я пытался сгруппировать ресурсы перед компиляцией, используя
#Clobber assets to force recompilation
Rails.logger.info("Clobber Assets")
Rake::Task['assets:clobber'].invoke
Rake::Task['assets:clobber'].reenable
Но опять же это будет работать только один раз
. Сценарий:
Администратор обновляет цвета для текущей темы приложения, которая вызывает фоновую задачу, отложенное задание, для записи необходимых изменений в
assests/stylesheets/_colours.scss file
Чтобы эти изменения вступили в силу, я скомпилирую активов, очистите ресурсы, убедитесь, что посетители, которые кэшировали ресурсы, получат последнюю версию, а затем перезапустите сервер
Поскольку я использую частичный синтаксис для именования _colours.s css Мне это не нужно функциональность в среде разработки при автоматическом подборе изменений
Приветствуются предложения по более подходящему решению