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
41 lines
1.6 KiB
Ruby
41 lines
1.6 KiB
Ruby
# 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
|
|
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
|
|
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
|
|
|
|
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])
|
|
|
|
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
|
|
Rake::Task[:precompile].enhance do
|
|
Rake::Task["assets:generate_error_pages"].invoke
|
|
Rake::Task["assets:non_digest_assets"].invoke
|
|
end
|
|
end
|