Как форсировать компиляцию активов - Rails 6 - PullRequest
0 голосов
/ 27 апреля 2020

Использование 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 Мне это не нужно функциональность в среде разработки при автоматическом подборе изменений

Приветствуются предложения по более подходящему решению

1 Ответ

0 голосов
/ 28 апреля 2020

Решил проблему, переключившись с использования

Rake::Task['assets:precompile'].invoke
Rake::Task['assets:precompile'].reenable

на

RAILS_ENV=production rails assets:precompile

Мне нужно заточить активы и необъяснимые активы: задача клоббер будет запускать несколько раз после переключения задачи прекомпиляции

проблема решена

...