Revert "DEV: Update to Sprockets 4.0 (#16467)" (#16524)

This reverts commit 01107e418e.

We have seen some random occurrences of corrupted assets, and think it may be related to the sprockets 4 update. Reverting for investigation
This commit is contained in:
David Taylor 2022-04-20 22:17:29 +01:00 committed by GitHub
parent 1551eaab01
commit c88ca23e8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 25 deletions

View File

@ -31,7 +31,9 @@ end
gem 'json' gem 'json'
gem 'sprockets' # TODO: At the moment Discourse does not work with Sprockets 4, we would need to correct internals
# This is a desired upgrade we should get to.
gem 'sprockets', '3.7.2'
# this will eventually be added to rails, # this will eventually be added to rails,
# allows us to precompile all our templates in the unicorn master # allows us to precompile all our templates in the unicorn master

View File

@ -443,7 +443,7 @@ GEM
simplecov_json_formatter (~> 0.1) simplecov_json_formatter (~> 0.1)
simplecov-html (0.12.3) simplecov-html (0.12.3)
simplecov_json_formatter (0.1.4) simplecov_json_formatter (0.1.4)
sprockets (4.0.3) sprockets (3.7.2)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (> 1, < 3) rack (> 1, < 3)
sprockets-rails (3.4.2) sprockets-rails (3.4.2)
@ -602,7 +602,7 @@ DEPENDENCIES
shoulda-matchers shoulda-matchers
sidekiq sidekiq
simplecov simplecov
sprockets sprockets (= 3.7.2)
sprockets-rails sprockets-rails
sshkey sshkey
stackprof stackprof

View File

@ -1 +0,0 @@
//= link_tree ../images

View File

@ -142,12 +142,11 @@ module Discourse
config.assets.skip_minification = [] config.assets.skip_minification = []
# explicitly precompile any images in plugins ( /assets/images ) path # explicitly precompile any images in plugins ( /assets/images ) path
Dir.glob("#{config.root}/plugins/*/assets/images/**/*").each do |filename| config.assets.precompile += [lambda do |filename, path|
config.assets.precompile << filename if !%w(.js .css).include?(File.extname(filename)) path =~ /assets\/images/ && !%w(.js .css).include?(File.extname(filename))
end end]
config.assets.precompile += %w{ config.assets.precompile += %w{
application.js
vendor.js vendor.js
admin.js admin.js
browser-detect.js browser-detect.js
@ -194,6 +193,25 @@ module Discourse
end end
end end
# out of the box sprockets 3 grabs loose files that are hanging in assets,
# the exclusion list does not include hbs so you double compile all this stuff
initializer :fix_sprockets_loose_file_searcher, after: :set_default_precompile do |app|
app.config.assets.precompile.delete(Sprockets::Railtie::LOOSE_APP_ASSETS)
# We don't want application from node_modules, only from the root
app.config.assets.precompile.delete(/(?:\/|\\|\A)application\.(css|js)$/)
app.config.assets.precompile += ['application.js']
start_path = ::Rails.root.join("app/assets").to_s
exclude = ['.es6', '.hbs', '.hbr', '.js', '.css', '.lock', '.json', '.log', '.html', '']
app.config.assets.precompile << lambda do |logical_path, filename|
filename.start_with?(start_path) &&
!filename.include?("/node_modules/") &&
!filename.include?("/dist/") &&
!exclude.include?(File.extname(logical_path))
end
end
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'UTC' config.time_zone = 'UTC'
@ -272,11 +290,6 @@ module Discourse
Sprockets.register_mime_type 'application/javascript', extensions: ['.js', '.es6', '.js.es6'], charset: :unicode Sprockets.register_mime_type 'application/javascript', extensions: ['.js', '.es6', '.js.es6'], charset: :unicode
Sprockets.register_postprocessor 'application/javascript', DiscourseJsProcessor Sprockets.register_postprocessor 'application/javascript', DiscourseJsProcessor
# This class doesn't exist in Sprockets 4, but ember-rails tries to 'autoload' it
# Define an empty class to prevent an error
class Sprockets::Engines
end
require 'discourse_redis' require 'discourse_redis'
require 'logster/redis_store' require 'logster/redis_store'
# Use redis for our cache # Use redis for our cache

View File

@ -1,12 +0,0 @@
# frozen_string_literal: true
# One of the initializers in `discourse-ember-rails/lib/ember_rails.rb` tries to set
# the ember template compiler path based on a call to `Sprockets::Environment#resolve`
# which started returning an array in Sprockets 4.
# This doesn't seem to be needed - it was setting to the existing value, so we can just ignore it.
Ember::Handlebars::Template.singleton_class.prepend(Module.new do
def setup_ember_template_compiler(path)
return if path.is_a? Array
super
end
end)