如何强制编译资产 - Rails 6
How to force asset compilation - Rails 6
将 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.scss 我不需要在开发环境中使用此功能,因为更改会自动获取
欢迎提出更合适的解决方案的建议
通过从使用
切换到解决了这个问题
Rake::Task['assets:precompile'].invoke
Rake::Task['assets:precompile'].reenable
至
RAILS_ENV=production rails assets:precompile
我确实需要破坏资产,无法解释的是,一旦我切换预编译任务,assets:clobber 任务将 运行 多次
问题已解决
将 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.scss 我不需要在开发环境中使用此功能,因为更改会自动获取
欢迎提出更合适的解决方案的建议
通过从使用
切换到解决了这个问题Rake::Task['assets:precompile'].invoke
Rake::Task['assets:precompile'].reenable
至
RAILS_ENV=production rails assets:precompile
我确实需要破坏资产,无法解释的是,一旦我切换预编译任务,assets:clobber 任务将 运行 多次
问题已解决