FIX: deprecation warning - initialization autoloaded the constant (#12400)

Get rid of deprecation related to Zeitwerk autoloader.

Original PR was reverted because of multisite bug #12381 - thank you @davidtaylorhq for fixing it.

I added the last commit to fix that multisite problem.
This commit is contained in:
Krzysztof Kotlarek
2021-03-16 09:47:57 +11:00
committed by GitHub
parent ddf8e9b6b6
commit e10a74694a
6 changed files with 169 additions and 150 deletions

View File

@@ -55,6 +55,8 @@ require 'pry-rails' if Rails.env.development?
require 'discourse_fonts' require 'discourse_fonts'
require_relative '../lib/zeitwerk_config.rb'
if defined?(Bundler) if defined?(Bundler)
bundler_groups = [:default] bundler_groups = [:default]
@@ -116,6 +118,7 @@ module Discourse
config.autoload_paths += Dir["#{config.root}/lib/validators/"] config.autoload_paths += Dir["#{config.root}/lib/validators/"]
Rails.autoloaders.main.ignore(Dir["#{config.root}/app/models/reports"]) Rails.autoloaders.main.ignore(Dir["#{config.root}/app/models/reports"])
Rails.autoloaders.main.ignore(Dir["#{config.root}/lib/freedom_patches"])
# Only load the plugins named here, in the order given (default is alphabetical). # Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named. # :all can be used as a placeholder for all plugins not explicitly named.

View File

@@ -1,5 +1,13 @@
# frozen_string_literal: true # frozen_string_literal: true
Dir["#{Rails.root}/lib/freedom_patches/*.rb"].each do |f| # Multisite freedom patch defines RailsMultisite::DiscoursePatches.config which is used by 200-first_middlewares.rb
# Therefore it can not be postponed with .to_prepare
RUN_WITHOUT_PREPARE = ["#{Rails.root}/lib/freedom_patches/rails_multisite.rb"]
RUN_WITHOUT_PREPARE.each { |path| require(path) }
Rails.application.reloader.to_prepare do
Dir["#{Rails.root}/lib/freedom_patches/*.rb"].each do |f|
next if RUN_WITHOUT_PREPARE.any? { |path| path == f }
require(f) require(f)
end
end end

View File

@@ -16,7 +16,8 @@ if GlobalSetting.skip_redis?
return return
end end
reload_settings = lambda { Rails.application.reloader.to_prepare do
reload_settings = lambda {
RailsMultisite::ConnectionManagement.safe_each_connection do RailsMultisite::ConnectionManagement.safe_each_connection do
begin begin
SiteSetting.refresh! SiteSetting.refresh!
@@ -28,12 +29,13 @@ reload_settings = lambda {
# This will happen when migrating a new database # This will happen when migrating a new database
end end
end end
} }
reload_settings.call reload_settings.call
if !Rails.configuration.cache_classes if !Rails.configuration.cache_classes
ActiveSupport::Reloader.to_prepare do ActiveSupport::Reloader.to_prepare do
reload_settings.call reload_settings.call
end end
end
end end

View File

@@ -5,15 +5,17 @@
require 'i18n/backend/discourse_i18n' require 'i18n/backend/discourse_i18n'
require 'i18n/backend/fallback_locale_list' require 'i18n/backend/fallback_locale_list'
I18n.backend = I18n::Backend::DiscourseI18n.new Rails.application.reloader.to_prepare do
I18n.fallbacks = I18n::Backend::FallbackLocaleList.new I18n.backend = I18n::Backend::DiscourseI18n.new
I18n.config.missing_interpolation_argument_handler = proc { throw(:exception) } I18n.fallbacks = I18n::Backend::FallbackLocaleList.new
I18n.reload! I18n.config.missing_interpolation_argument_handler = proc { throw(:exception) }
I18n.init_accelerator!(overrides_enabled: ENV['DISABLE_TRANSLATION_OVERRIDES'] != '1') I18n.reload!
I18n.init_accelerator!(overrides_enabled: ENV['DISABLE_TRANSLATION_OVERRIDES'] != '1')
unless Rails.env.test? unless Rails.env.test?
MessageBus.subscribe("/i18n-flush") do MessageBus.subscribe("/i18n-flush") do
I18n.reload! I18n.reload!
ExtraLocalesController.clear_cache! ExtraLocalesController.clear_cache!
end end
end
end end

View File

@@ -1,22 +1,25 @@
# frozen_string_literal: true # frozen_string_literal: true
if GlobalSetting.skip_redis? if GlobalSetting.skip_redis?
Rails.application.reloader.to_prepare do
if Rails.logger.respond_to? :chained if Rails.logger.respond_to? :chained
Rails.logger = Rails.logger.chained.first Rails.logger = Rails.logger.chained.first
end end
end
return return
end end
if Rails.env.development? && RUBY_VERSION.match?(/^2\.5\.[23]/) Rails.application.reloader.to_prepare do
if Rails.env.development? && RUBY_VERSION.match?(/^2\.5\.[23]/)
STDERR.puts "WARNING: Discourse development environment runs slower on Ruby 2.5.3 or below" STDERR.puts "WARNING: Discourse development environment runs slower on Ruby 2.5.3 or below"
STDERR.puts "We recommend you upgrade to Ruby 2.6.1 for the optimal development performance" STDERR.puts "We recommend you upgrade to Ruby 2.6.1 for the optimal development performance"
# we have to used to older and slower version of the logger cause the new one exposes a Ruby bug in # we have to used to older and slower version of the logger cause the new one exposes a Ruby bug in
# the Queue class which causes segmentation faults # the Queue class which causes segmentation faults
Logster::Scheduler.disable Logster::Scheduler.disable
end end
if Rails.env.development? && !Sidekiq.server? && ENV["RAILS_LOGS_STDOUT"] == "1" if Rails.env.development? && !Sidekiq.server? && ENV["RAILS_LOGS_STDOUT"] == "1"
console = ActiveSupport::Logger.new(STDOUT) console = ActiveSupport::Logger.new(STDOUT)
original_logger = Rails.logger.chained.first original_logger = Rails.logger.chained.first
console.formatter = original_logger.formatter console.formatter = original_logger.formatter
@@ -25,9 +28,9 @@ if Rails.env.development? && !Sidekiq.server? && ENV["RAILS_LOGS_STDOUT"] == "1"
unless ActiveSupport::Logger.logger_outputs_to?(original_logger, STDOUT) unless ActiveSupport::Logger.logger_outputs_to?(original_logger, STDOUT)
original_logger.extend(ActiveSupport::Logger.broadcast(console)) original_logger.extend(ActiveSupport::Logger.broadcast(console))
end end
end end
if Rails.env.production? if Rails.env.production?
Logster.store.ignore = [ Logster.store.ignore = [
# honestly, Rails should not be logging this, its real noisy # honestly, Rails should not be logging this, its real noisy
/^ActionController::RoutingError \(No route matches/, /^ActionController::RoutingError \(No route matches/,
@@ -79,24 +82,24 @@ if Rails.env.production?
/^Creating scope :open\. Overwriting existing method Poll\.open\./, /^Creating scope :open\. Overwriting existing method Poll\.open\./,
] ]
Logster.config.env_expandable_keys.push(:hostname, :problem_db) Logster.config.env_expandable_keys.push(:hostname, :problem_db)
end end
Logster.store.max_backlog = GlobalSetting.max_logster_logs Logster.store.max_backlog = GlobalSetting.max_logster_logs
# TODO logster should be able to do this automatically # TODO logster should be able to do this automatically
Logster.config.subdirectory = "#{GlobalSetting.relative_url_root}/logs" Logster.config.subdirectory = "#{GlobalSetting.relative_url_root}/logs"
Logster.config.application_version = Discourse.git_version Logster.config.application_version = Discourse.git_version
Logster.config.enable_custom_patterns_via_ui = true Logster.config.enable_custom_patterns_via_ui = true
Logster.config.enable_js_error_reporting = GlobalSetting.enable_js_error_reporting Logster.config.enable_js_error_reporting = GlobalSetting.enable_js_error_reporting
store = Logster.store store = Logster.store
redis = Logster.store.redis redis = Logster.store.redis
store.redis_prefix = Proc.new { redis.namespace } store.redis_prefix = Proc.new { redis.namespace }
store.redis_raw_connection = redis.without_namespace store.redis_raw_connection = redis.without_namespace
severities = [Logger::WARN, Logger::ERROR, Logger::FATAL, Logger::UNKNOWN] severities = [Logger::WARN, Logger::ERROR, Logger::FATAL, Logger::UNKNOWN]
RailsMultisite::ConnectionManagement.each_connection do RailsMultisite::ConnectionManagement.each_connection do
error_rate_per_minute = SiteSetting.alert_admins_if_errors_per_minute rescue 0 error_rate_per_minute = SiteSetting.alert_admins_if_errors_per_minute rescue 0
if (error_rate_per_minute || 0) > 0 if (error_rate_per_minute || 0) > 0
@@ -126,23 +129,24 @@ RailsMultisite::ConnectionManagement.each_connection do
) )
end end
end end
end end
if Rails.configuration.multisite if Rails.configuration.multisite
if Rails.logger.respond_to? :chained if Rails.logger.respond_to? :chained
chained = Rails.logger.chained chained = Rails.logger.chained
chained && chained.first.formatter = RailsMultisite::Formatter.new chained && chained.first.formatter = RailsMultisite::Formatter.new
end end
end end
Logster.config.project_directories = [ Logster.config.project_directories = [
{ path: Rails.root.to_s, url: "https://github.com/discourse/discourse", main_app: true } { path: Rails.root.to_s, url: "https://github.com/discourse/discourse", main_app: true }
] ]
Discourse.plugins.each do |plugin| Discourse.plugins.each do |plugin|
next if !plugin.metadata.url next if !plugin.metadata.url
Logster.config.project_directories << { Logster.config.project_directories << {
path: "#{Rails.root.to_s}/plugins/#{plugin.directory_name}", path: "#{Rails.root.to_s}/plugins/#{plugin.directory_name}",
url: plugin.metadata.url url: plugin.metadata.url
} }
end
end end