-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
FIX: deprecation warning - initialization autoloaded the constant (#1…
…2400) 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.
- Loading branch information
Showing
6 changed files
with
170 additions
and
151 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,13 @@ | ||
# frozen_string_literal: true | ||
|
||
Dir["#{Rails.root}/lib/freedom_patches/*.rb"].each do |f| | ||
require(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) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,148 +1,152 @@ | ||
# frozen_string_literal: true | ||
|
||
if GlobalSetting.skip_redis? | ||
if Rails.logger.respond_to? :chained | ||
Rails.logger = Rails.logger.chained.first | ||
Rails.application.reloader.to_prepare do | ||
if Rails.logger.respond_to? :chained | ||
Rails.logger = Rails.logger.chained.first | ||
end | ||
end | ||
return | ||
end | ||
|
||
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 "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 | ||
# the Queue class which causes segmentation faults | ||
Logster::Scheduler.disable | ||
end | ||
|
||
if Rails.env.development? && !Sidekiq.server? && ENV["RAILS_LOGS_STDOUT"] == "1" | ||
console = ActiveSupport::Logger.new(STDOUT) | ||
original_logger = Rails.logger.chained.first | ||
console.formatter = original_logger.formatter | ||
console.level = original_logger.level | ||
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 "We recommend you upgrade to Ruby 2.6.1 for the optimal development performance" | ||
|
||
unless ActiveSupport::Logger.logger_outputs_to?(original_logger, STDOUT) | ||
original_logger.extend(ActiveSupport::Logger.broadcast(console)) | ||
# 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 | ||
Logster::Scheduler.disable | ||
end | ||
end | ||
|
||
if Rails.env.production? | ||
Logster.store.ignore = [ | ||
# honestly, Rails should not be logging this, its real noisy | ||
/^ActionController::RoutingError \(No route matches/, | ||
|
||
/^PG::Error: ERROR:\s+duplicate key/, | ||
|
||
/^ActionController::UnknownFormat/, | ||
/^ActionController::UnknownHttpMethod/, | ||
/^AbstractController::ActionNotFound/, | ||
# ignore any empty JS errors that contain blanks or zeros for line and column fields | ||
# | ||
# Line: | ||
# Column: | ||
# | ||
/(?m).*?Line: (?:\D|0).*?Column: (?:\D|0)/, | ||
|
||
# suppress empty JS errors (covers MSIE 9, etc) | ||
/^(Syntax|Script) error.*Line: (0|1)\b/m, | ||
|
||
# CSRF errors are not providing enough data | ||
# suppress unconditionally for now | ||
/^Can't verify CSRF token authenticity.$/, | ||
|
||
# Yandex bot triggers this JS error a lot | ||
/^Uncaught ReferenceError: I18n is not defined/, | ||
|
||
# related to browser plugins somehow, we don't care | ||
/Error calling method on NPObject/, | ||
|
||
# 404s can be dealt with elsewhere | ||
/^ActiveRecord::RecordNotFound/, | ||
|
||
# bad asset requested, no need to log | ||
/^ActionController::BadRequest/, | ||
if Rails.env.development? && !Sidekiq.server? && ENV["RAILS_LOGS_STDOUT"] == "1" | ||
console = ActiveSupport::Logger.new(STDOUT) | ||
original_logger = Rails.logger.chained.first | ||
console.formatter = original_logger.formatter | ||
console.level = original_logger.level | ||
|
||
# we can't do anything about invalid parameters | ||
/Rack::QueryParser::InvalidParameterError/, | ||
|
||
# we handle this cleanly in the message bus middleware | ||
# no point logging to logster | ||
/RateLimiter::LimitExceeded.*/m, | ||
unless ActiveSupport::Logger.logger_outputs_to?(original_logger, STDOUT) | ||
original_logger.extend(ActiveSupport::Logger.broadcast(console)) | ||
end | ||
end | ||
|
||
# see https://github.com/rails/rails/issues/34599 | ||
# Poll defines an enum with the value `open` ActiveRecord then attempts | ||
# AR then warns cause #open is being redefined, it is already defined | ||
# privately in Kernel per: http://ruby-doc.org/core-2.5.3/Kernel.html#method-i-open | ||
# Once the rails issue is fixed we can stop this error suppression and stop defining | ||
# scopes for the enums | ||
/^Creating scope :open\. Overwriting existing method Poll\.open\./, | ||
] | ||
Logster.config.env_expandable_keys.push(:hostname, :problem_db) | ||
end | ||
if Rails.env.production? | ||
Logster.store.ignore = [ | ||
# honestly, Rails should not be logging this, its real noisy | ||
/^ActionController::RoutingError \(No route matches/, | ||
|
||
/^PG::Error: ERROR:\s+duplicate key/, | ||
|
||
/^ActionController::UnknownFormat/, | ||
/^ActionController::UnknownHttpMethod/, | ||
/^AbstractController::ActionNotFound/, | ||
# ignore any empty JS errors that contain blanks or zeros for line and column fields | ||
# | ||
# Line: | ||
# Column: | ||
# | ||
/(?m).*?Line: (?:\D|0).*?Column: (?:\D|0)/, | ||
|
||
# suppress empty JS errors (covers MSIE 9, etc) | ||
/^(Syntax|Script) error.*Line: (0|1)\b/m, | ||
|
||
# CSRF errors are not providing enough data | ||
# suppress unconditionally for now | ||
/^Can't verify CSRF token authenticity.$/, | ||
|
||
# Yandex bot triggers this JS error a lot | ||
/^Uncaught ReferenceError: I18n is not defined/, | ||
|
||
# related to browser plugins somehow, we don't care | ||
/Error calling method on NPObject/, | ||
|
||
# 404s can be dealt with elsewhere | ||
/^ActiveRecord::RecordNotFound/, | ||
|
||
# bad asset requested, no need to log | ||
/^ActionController::BadRequest/, | ||
|
||
# we can't do anything about invalid parameters | ||
/Rack::QueryParser::InvalidParameterError/, | ||
|
||
# we handle this cleanly in the message bus middleware | ||
# no point logging to logster | ||
/RateLimiter::LimitExceeded.*/m, | ||
|
||
# see https://github.com/rails/rails/issues/34599 | ||
# Poll defines an enum with the value `open` ActiveRecord then attempts | ||
# AR then warns cause #open is being redefined, it is already defined | ||
# privately in Kernel per: http://ruby-doc.org/core-2.5.3/Kernel.html#method-i-open | ||
# Once the rails issue is fixed we can stop this error suppression and stop defining | ||
# scopes for the enums | ||
/^Creating scope :open\. Overwriting existing method Poll\.open\./, | ||
] | ||
Logster.config.env_expandable_keys.push(:hostname, :problem_db) | ||
end | ||
|
||
Logster.store.max_backlog = GlobalSetting.max_logster_logs | ||
|
||
# TODO logster should be able to do this automatically | ||
Logster.config.subdirectory = "#{GlobalSetting.relative_url_root}/logs" | ||
|
||
Logster.config.application_version = Discourse.git_version | ||
Logster.config.enable_custom_patterns_via_ui = true | ||
Logster.config.enable_js_error_reporting = GlobalSetting.enable_js_error_reporting | ||
|
||
store = Logster.store | ||
redis = Logster.store.redis | ||
store.redis_prefix = Proc.new { redis.namespace } | ||
store.redis_raw_connection = redis.without_namespace | ||
severities = [Logger::WARN, Logger::ERROR, Logger::FATAL, Logger::UNKNOWN] | ||
|
||
RailsMultisite::ConnectionManagement.each_connection do | ||
error_rate_per_minute = SiteSetting.alert_admins_if_errors_per_minute rescue 0 | ||
|
||
if (error_rate_per_minute || 0) > 0 | ||
store.register_rate_limit_per_minute(severities, error_rate_per_minute) do |rate| | ||
MessageBus.publish("/logs_error_rate_exceeded", | ||
{ | ||
rate: rate, | ||
duration: 'minute', | ||
publish_at: Time.current.to_i | ||
}, | ||
group_ids: [Group::AUTO_GROUPS[:admins]] | ||
) | ||
Logster.store.max_backlog = GlobalSetting.max_logster_logs | ||
|
||
# TODO logster should be able to do this automatically | ||
Logster.config.subdirectory = "#{GlobalSetting.relative_url_root}/logs" | ||
|
||
Logster.config.application_version = Discourse.git_version | ||
Logster.config.enable_custom_patterns_via_ui = true | ||
Logster.config.enable_js_error_reporting = GlobalSetting.enable_js_error_reporting | ||
|
||
store = Logster.store | ||
redis = Logster.store.redis | ||
store.redis_prefix = Proc.new { redis.namespace } | ||
store.redis_raw_connection = redis.without_namespace | ||
severities = [Logger::WARN, Logger::ERROR, Logger::FATAL, Logger::UNKNOWN] | ||
|
||
RailsMultisite::ConnectionManagement.each_connection do | ||
error_rate_per_minute = SiteSetting.alert_admins_if_errors_per_minute rescue 0 | ||
|
||
if (error_rate_per_minute || 0) > 0 | ||
store.register_rate_limit_per_minute(severities, error_rate_per_minute) do |rate| | ||
MessageBus.publish("/logs_error_rate_exceeded", | ||
{ | ||
rate: rate, | ||
duration: 'minute', | ||
publish_at: Time.current.to_i | ||
}, | ||
group_ids: [Group::AUTO_GROUPS[:admins]] | ||
) | ||
end | ||
end | ||
end | ||
|
||
error_rate_per_hour = SiteSetting.alert_admins_if_errors_per_hour rescue 0 | ||
|
||
if (error_rate_per_hour || 0) > 0 | ||
store.register_rate_limit_per_hour(severities, error_rate_per_hour) do |rate| | ||
MessageBus.publish("/logs_error_rate_exceeded", | ||
{ | ||
rate: rate, | ||
duration: 'hour', | ||
publish_at: Time.current.to_i, | ||
}, | ||
group_ids: [Group::AUTO_GROUPS[:admins]] | ||
) | ||
error_rate_per_hour = SiteSetting.alert_admins_if_errors_per_hour rescue 0 | ||
|
||
if (error_rate_per_hour || 0) > 0 | ||
store.register_rate_limit_per_hour(severities, error_rate_per_hour) do |rate| | ||
MessageBus.publish("/logs_error_rate_exceeded", | ||
{ | ||
rate: rate, | ||
duration: 'hour', | ||
publish_at: Time.current.to_i, | ||
}, | ||
group_ids: [Group::AUTO_GROUPS[:admins]] | ||
) | ||
end | ||
end | ||
end | ||
end | ||
|
||
if Rails.configuration.multisite | ||
if Rails.logger.respond_to? :chained | ||
chained = Rails.logger.chained | ||
chained && chained.first.formatter = RailsMultisite::Formatter.new | ||
if Rails.configuration.multisite | ||
if Rails.logger.respond_to? :chained | ||
chained = Rails.logger.chained | ||
chained && chained.first.formatter = RailsMultisite::Formatter.new | ||
end | ||
end | ||
end | ||
|
||
Logster.config.project_directories = [ | ||
{ path: Rails.root.to_s, url: "https://github.com/discourse/discourse", main_app: true } | ||
] | ||
Discourse.plugins.each do |plugin| | ||
next if !plugin.metadata.url | ||
Logster.config.project_directories = [ | ||
{ path: Rails.root.to_s, url: "https://github.com/discourse/discourse", main_app: true } | ||
] | ||
Discourse.plugins.each do |plugin| | ||
next if !plugin.metadata.url | ||
|
||
Logster.config.project_directories << { | ||
path: "#{Rails.root.to_s}/plugins/#{plugin.directory_name}", | ||
url: plugin.metadata.url | ||
} | ||
Logster.config.project_directories << { | ||
path: "#{Rails.root.to_s}/plugins/#{plugin.directory_name}", | ||
url: plugin.metadata.url | ||
} | ||
end | ||
end |
File renamed without changes.