Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/diaspora/diaspora.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Neff <benjamin@coding4coffee.ch>2022-07-20 05:59:26 +0300
committerBenjamin Neff <benjamin@coding4coffee.ch>2022-07-20 22:32:21 +0300
commit3c4da76be52d48bb6f2646cc269cc47c5298f2bc (patch)
tree23985e96ca715a10114778728db6382a70914c5a /lib/tasks/assets.rake
parent3b02eb87bd3aa3fc2cb0f88101c03fb6d728c0d1 (diff)
Fix follow up tasks for assets:precompile when no manifest existed
When no `.sprockets-manifest-xxx.json` existed, every instance of `Sprockets::Manifest` generated their own path with their own random filename, and since this happened before the assets were actually precompiled, they were all empty. So the error pages didn't find the manifest and the non-digest assets also didn't have any assets to copy. So lets create our own instance of `Sprockets::Manifest` here, AFTER `assets:precompile`, which then loads the manifest json that was used during precompile, so all precompiled assets are available. closes #8366
Diffstat (limited to 'lib/tasks/assets.rake')
-rw-r--r--lib/tasks/assets.rake31
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/tasks/assets.rake b/lib/tasks/assets.rake
index 38101d7b3..4c65b8500 100644
--- a/lib/tasks/assets.rake
+++ b/lib/tasks/assets.rake
@@ -1,35 +1,40 @@
# frozen_string_literal: true
namespace :assets do
+ # create new assets manifest for tasks which run after assets:precompile
+ def assets_manifest
+ return @assets_manifest if @assets_manifest
+
+ config = Diaspora::Application.config
+ path = File.join(config.paths["public"].first, config.assets.prefix)
+ @assets_manifest = Sprockets::Manifest.new(Diaspora::Application.assets, path, config.assets.manifest)
+ end
+
desc "Generate error pages"
- task :generate_error_pages => :environment do
+ task generate_error_pages: :environment do
+ ApplicationController.view_context_class.assets_manifest = assets_manifest
renderer = ErrorPageRenderer.new codes: [404, 422, 500]
renderer.render
end
desc "Create non digest assets"
task non_digest_assets: :environment do
- logger = ::Logging::Logger["assets:non_digest_assets"]
+ Diaspora::Application.config.assets.non_digest_assets.each do |asset|
+ digested_path = assets_manifest.assets[asset]
+ raise Sprockets::Rails::Helper::AssetNotFound, "Precompiled asset for '#{asset}' not found" unless digested_path
- non_digest_assets = Diaspora::Application.config.assets.non_digest_assets
-
- Rails.application.assets_manifest.assets.each do |logical_path, digested_path|
- logical_pathname = Pathname.new(logical_path)
- next unless non_digest_assets.any? {|testpath| logical_pathname.fnmatch?(testpath, File::FNM_PATHNAME) }
-
- full_digested_path = Rails.root.join("public", "assets", digested_path)
- full_non_digested_path = Rails.root.join("public", "assets", logical_path)
+ full_digested_path = File.join(assets_manifest.directory, digested_path)
+ full_non_digested_path = File.join(assets_manifest.directory, asset)
next unless FileUtils.uptodate?(full_digested_path, [full_non_digested_path])
- logger.info "Copying #{full_digested_path} to #{full_non_digested_path}"
-
+ puts "Copying #{full_digested_path} to #{full_non_digested_path}"
FileUtils.copy_file(full_digested_path, full_non_digested_path, true)
end
end
# Augment precompile with error page generation
- task :precompile do
+ Rake::Task[:precompile].enhance do
Rake::Task["assets:generate_error_pages"].invoke
Rake::Task["assets:non_digest_assets"].invoke
end