discourse/config/environments/production.rb
Alan Guo Xiang Tan 5cfe323445
PERF: Strict loading for SidebarSection queries (#21717)
What is this change required?

I noticed that actions in `SidebarSectionsController` resulted in
lots of N+1 queries problem and I wanted a solution to
prevent such problems without having to write N+1 queries tests. I have
also used strict loading for `SidebarSection` queries in performance
sensitive spots.

Note that in this commit, I have also set `config.active_record.action_on_strict_loading_violation = :log`
for the production environment so that we have more visibility of
potential N+1 queries problem in the logs. In development and test
environment, we're sticking with the default of raising an error.
2023-05-25 09:10:32 +08:00

77 lines
2.6 KiB
Ruby

# frozen_string_literal: true
Discourse::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# Code is not reloaded between requests
config.cache_classes = true
config.eager_load = true
# Full error reports are disabled and caching is turned on
config.consider_all_requests_local = false
config.action_controller.perform_caching = true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.public_file_server.enabled = GlobalSetting.serve_static_assets || false
config.assets.js_compressor = :uglifier
# stuff should be pre-compiled
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
config.log_level = :info
if GlobalSetting.smtp_address
settings = {
address: GlobalSetting.smtp_address,
port: GlobalSetting.smtp_port,
domain: GlobalSetting.smtp_domain,
user_name: GlobalSetting.smtp_user_name,
password: GlobalSetting.smtp_password,
authentication: GlobalSetting.smtp_authentication,
enable_starttls_auto: GlobalSetting.smtp_enable_start_tls,
open_timeout: GlobalSetting.smtp_open_timeout,
read_timeout: GlobalSetting.smtp_read_timeout,
}
settings[
:openssl_verify_mode
] = GlobalSetting.smtp_openssl_verify_mode if GlobalSetting.smtp_openssl_verify_mode
settings[:tls] = true if GlobalSetting.smtp_force_tls
config.action_mailer.smtp_settings = settings.compact
else
config.action_mailer.delivery_method = :sendmail
config.action_mailer.sendmail_settings = { arguments: "-i" }
end
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
# allows developers to use mini profiler
config.load_mini_profiler = GlobalSetting.load_mini_profiler
# Discourse strongly recommend you use a CDN.
# For origin pull cdns all you need to do is register an account and configure
config.action_controller.asset_host = GlobalSetting.cdn_url
# a comma delimited list of emails your devs have
# developers have god like rights and may impersonate anyone in the system
# normal admins may only impersonate other moderators (not admins)
if emails = GlobalSetting.developer_emails
config.developer_emails = emails.split(",").map(&:downcase).map(&:strip)
end
config.active_record.dump_schema_after_migration = false
if ENV["RAILS_LOG_TO_STDOUT"].present?
config.logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
end
config.active_record.action_on_strict_loading_violation = :log
end