如何强制编译资产 - Rails 6

问题描述 投票:0回答:1

使用Rails 6.0.2.1和Ruby 2.6.3以及NGINXI,当资产在生产服务器中发生变化时,有一个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.scss,所以在开发环境中我不需要这个功能,因为变化会被自动接收到

欢迎提出更合适的解决方案建议

ruby-on-rails asset-pipeline ruby-on-rails-6
1个回答
0
投票

解决这个问题的方法是从使用

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

RAILS_ENV=production rails assets:precompile

我确实需要clobber资产,但无法解释的是,一旦我切换了预编译任务,assets:clobber任务就会运行多次。

问题解决了

© www.soinside.com 2019 - 2024. All rights reserved.