Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'config/initializers')
-rw-r--r--config/initializers/00_rails_disable_joins.rb16
-rw-r--r--config/initializers/0_inject_enterprise_edition_module.rb26
-rw-r--r--config/initializers/0_log_deprecations.rb22
-rw-r--r--config/initializers/1_postgresql_only.rb2
-rw-r--r--config/initializers/1_settings.rb20
-rw-r--r--config/initializers/2_gitlab.rb3
-rw-r--r--config/initializers/active_record_build_select.rb6
-rw-r--r--config/initializers/active_record_lifecycle.rb2
-rw-r--r--config/initializers/active_record_transaction_observer.rb18
-rw-r--r--config/initializers/active_record_transaction_patches.rb11
-rw-r--r--config/initializers/check_decomposition_database_config.rb7
-rw-r--r--config/initializers/console_message.rb4
-rw-r--r--config/initializers/content_security_policy.rb9
-rw-r--r--config/initializers/database_config.rb8
-rw-r--r--config/initializers/forbid_sidekiq_in_transactions.rb2
-rw-r--r--config/initializers/gitlab_experiment.rb55
-rw-r--r--config/initializers/load_balancing.rb9
-rw-r--r--config/initializers/rails_asset_host.rb15
-rw-r--r--config/initializers/session_store.rb2
-rw-r--r--config/initializers/smtp_settings.rb.sample10
-rw-r--r--config/initializers/transaction_metrics.rb3
21 files changed, 206 insertions, 44 deletions
diff --git a/config/initializers/00_rails_disable_joins.rb b/config/initializers/00_rails_disable_joins.rb
new file mode 100644
index 00000000000..4274365ccad
--- /dev/null
+++ b/config/initializers/00_rails_disable_joins.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+# Backported from Rails 7.0
+# Initial support for has_many :through was implemented in https://github.com/rails/rails/pull/41937
+# Support for has_one :through was implemented in https://github.com/rails/rails/pull/42079
+raise 'DisableJoins patch is only to be used with versions of Rails < 7.0' unless Rails::VERSION::MAJOR < 7
+
+ActiveRecord::Associations::Association.prepend(GemExtensions::ActiveRecord::Association)
+# Temporarily allow :disable_joins to accept a lambda argument, to control rollout with feature flags
+ActiveRecord::Associations::Association.prepend(GemExtensions::ActiveRecord::ConfigurableDisableJoins)
+ActiveRecord::Associations::Builder::HasOne.prepend(GemExtensions::ActiveRecord::Associations::Builder::HasOne)
+ActiveRecord::Associations::Builder::HasMany.prepend(GemExtensions::ActiveRecord::Associations::Builder::HasMany)
+ActiveRecord::Associations::HasOneThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::HasOneThroughAssociation)
+ActiveRecord::Associations::HasManyThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::HasManyThroughAssociation)
+ActiveRecord::Associations::Preloader::ThroughAssociation.prepend(GemExtensions::ActiveRecord::Associations::Preloader::ThroughAssociation)
+ActiveRecord::Base.extend(GemExtensions::ActiveRecord::DelegateCache)
diff --git a/config/initializers/0_inject_enterprise_edition_module.rb b/config/initializers/0_inject_enterprise_edition_module.rb
index ea3fbda9186..a00075990eb 100644
--- a/config/initializers/0_inject_enterprise_edition_module.rb
+++ b/config/initializers/0_inject_enterprise_edition_module.rb
@@ -64,7 +64,31 @@ module InjectEnterpriseEditionModule
# After we moved everything over to zeitwerk we can avoid rescuing
# NameError and just check if const_defined?
# mod && mod.const_defined?(name, false) && mod.const_get(name, false)
- mod && mod.const_get(name, false)
+ result = mod && mod.const_get(name, false)
+
+ if result.name == "#{mod}::#{name}"
+ result
+ else
+ # This may hit into a Rails issue that when we try to load
+ # `EE::API::Appearance`, Rails might load `::Appearance` the first time
+ # when `mod.const_get(name, false)` is called if `::Appearance` is not
+ # loaded yet. This can be demonstrated as the following:
+ #
+ # EE.const_get('API::Appearance', false) # => Appearance
+ # EE.const_get('API::Appearance', false) # => raise NameError
+ #
+ # Getting a `NameError` is what we're expecting here, because
+ # `EE::API::Appearance` doesn't exist.
+ #
+ # This is because Rails will attempt to load constants from all the
+ # parent namespaces, and if it finds one it'll load it and return it.
+ # However, the second time when it's called, since the top-level class
+ # is already loaded, then Rails will skip this process. This weird
+ # behaviour can be worked around by calling this the second time.
+ # The particular line is at:
+ # https://github.com/rails/rails/blob/v6.1.3.2/activesupport/lib/active_support/dependencies.rb#L569-L570
+ mod.const_get(name, false)
+ end
rescue NameError
false
end
diff --git a/config/initializers/0_log_deprecations.rb b/config/initializers/0_log_deprecations.rb
new file mode 100644
index 00000000000..20fb5144937
--- /dev/null
+++ b/config/initializers/0_log_deprecations.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+def log_deprecations?
+ via_env_var = Gitlab::Utils.to_boolean(ENV['GITLAB_LOG_DEPRECATIONS'])
+ # enable by default during development unless explicitly turned off
+ via_env_var.nil? ? Rails.env.development? : via_env_var
+end
+
+if log_deprecations?
+ # Log deprecation warnings emitted through Kernel#warn, such as from gems or
+ # the Ruby VM.
+ Warning.process(/.+is deprecated$/) do |warning|
+ Gitlab::DeprecationJsonLogger.info(message: warning.strip, source: 'ruby')
+ # Returning :default means we continue emitting this to stderr as well.
+ :default
+ end
+
+ # Log deprecation warnings emitted from Rails (see ActiveSupport::Deprecation).
+ ActiveSupport::Notifications.subscribe('deprecation.rails') do |name, start, finish, id, payload|
+ Gitlab::DeprecationJsonLogger.info(message: payload[:message].strip, source: 'rails')
+ end
+end
diff --git a/config/initializers/1_postgresql_only.rb b/config/initializers/1_postgresql_only.rb
index 415fc6f2cae..7bb851daa08 100644
--- a/config/initializers/1_postgresql_only.rb
+++ b/config/initializers/1_postgresql_only.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
raise "PostgreSQL is the only supported database from GitLab 12.1" unless
- Gitlab::Database.postgresql?
+ Gitlab::Database.main.postgresql?
Gitlab::Database.check_postgres_version_and_print_warning
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index 42c7063378b..e71f1e1b028 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -164,6 +164,7 @@ Settings.gitlab['default_branch_protection'] ||= 2
Settings.gitlab['default_can_create_group'] = true if Settings.gitlab['default_can_create_group'].nil?
Settings.gitlab['default_theme'] = Gitlab::Themes::APPLICATION_DEFAULT if Settings.gitlab['default_theme'].nil?
Settings.gitlab['host'] ||= ENV['GITLAB_HOST'] || 'localhost'
+Settings.gitlab['cdn_host'] ||= ENV['GITLAB_CDN_HOST'].presence
Settings.gitlab['ssh_host'] ||= Settings.gitlab.host
Settings.gitlab['https'] = false if Settings.gitlab['https'].nil?
Settings.gitlab['port'] ||= ENV['GITLAB_PORT'] || (Settings.gitlab.https ? 443 : 80)
@@ -177,6 +178,7 @@ Settings.gitlab['email_display_name'] ||= ENV['GITLAB_EMAIL_DISPLAY_NAME'] || 'G
Settings.gitlab['email_reply_to'] ||= ENV['GITLAB_EMAIL_REPLY_TO'] || "noreply@#{Settings.gitlab.host}"
Settings.gitlab['email_subject_suffix'] ||= ENV['GITLAB_EMAIL_SUBJECT_SUFFIX'] || ""
Settings.gitlab['email_smime'] = SmimeSignatureSettings.parse(Settings.gitlab['email_smime'])
+Settings.gitlab['email_smtp_secret_file'] = Settings.absolute(Settings.gitlab['email_smtp_secret_file'] || File.join(Settings.encrypted_settings['path'], "smtp.yaml.enc"))
Settings.gitlab['base_url'] ||= Settings.__send__(:build_base_gitlab_url)
Settings.gitlab['url'] ||= Settings.__send__(:build_gitlab_url)
Settings.gitlab['user'] ||= 'git'
@@ -209,7 +211,7 @@ Settings.gitlab.default_projects_features['visibility_level'] = Settings.__sen
Settings.gitlab['domain_allowlist'] ||= []
Settings.gitlab['import_sources'] ||= Gitlab::ImportSources.values
Settings.gitlab['trusted_proxies'] ||= []
-Settings.gitlab['content_security_policy'] ||= Gitlab::ContentSecurityPolicy::ConfigLoader.default_settings_hash
+Settings.gitlab['content_security_policy'] ||= {}
Settings.gitlab['allowed_hosts'] ||= []
Settings.gitlab['no_todos_messages'] ||= YAML.load_file(Rails.root.join('config', 'no_todos_messages.yml'))
Settings.gitlab['impersonation_enabled'] ||= true if Settings.gitlab['impersonation_enabled'].nil?
@@ -444,6 +446,9 @@ Settings.cron_jobs['ci_schedule_delete_objects_worker']['job_class'] = 'Ci::Sche
Settings.cron_jobs['environments_auto_stop_cron_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['environments_auto_stop_cron_worker']['cron'] ||= '24 * * * *'
Settings.cron_jobs['environments_auto_stop_cron_worker']['job_class'] = 'Environments::AutoStopCronWorker'
+Settings.cron_jobs['environments_auto_delete_cron_worker'] ||= Settingslogic.new({})
+Settings.cron_jobs['environments_auto_delete_cron_worker']['cron'] ||= '34 * * * *'
+Settings.cron_jobs['environments_auto_delete_cron_worker']['job_class'] = 'Environments::AutoDeleteCronWorker'
Settings.cron_jobs['repository_check_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['repository_check_worker']['cron'] ||= '20 * * * *'
Settings.cron_jobs['repository_check_worker']['job_class'] = 'RepositoryCheck::DispatchWorker'
@@ -543,6 +548,9 @@ Settings.cron_jobs['update_container_registry_info_worker']['job_class'] = 'Upda
Settings.cron_jobs['postgres_dynamic_partitions_manager'] ||= Settingslogic.new({})
Settings.cron_jobs['postgres_dynamic_partitions_manager']['cron'] ||= '21 */6 * * *'
Settings.cron_jobs['postgres_dynamic_partitions_manager']['job_class'] ||= 'Database::PartitionManagementWorker'
+Settings.cron_jobs['postgres_dynamic_partitions_dropper'] ||= Settingslogic.new({})
+Settings.cron_jobs['postgres_dynamic_partitions_dropper']['cron'] ||= '45 12 * * *'
+Settings.cron_jobs['postgres_dynamic_partitions_dropper']['job_class'] ||= 'Database::DropDetachedPartitionsWorker'
Settings.cron_jobs['ci_platform_metrics_update_cron_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['ci_platform_metrics_update_cron_worker']['cron'] ||= '47 9 * * *'
Settings.cron_jobs['ci_platform_metrics_update_cron_worker']['job_class'] = 'CiPlatformMetricsUpdateCronWorker'
@@ -701,6 +709,9 @@ Gitlab.ee do
Settings.cron_jobs['security_orchestration_policy_rule_schedule_worker'] ||= Settingslogic.new({})
Settings.cron_jobs['security_orchestration_policy_rule_schedule_worker']['cron'] ||= '*/15 * * * *'
Settings.cron_jobs['security_orchestration_policy_rule_schedule_worker']['job_class'] = 'Security::OrchestrationPolicyRuleScheduleWorker'
+ Settings.cron_jobs['app_sec_dast_profile_schedule_worker'] ||= Settingslogic.new({})
+ Settings.cron_jobs['app_sec_dast_profile_schedule_worker']['cron'] ||= '7-59/15 * * * *'
+ Settings.cron_jobs['app_sec_dast_profile_schedule_worker']['job_class'] = 'AppSec::Dast::ProfileScheduleWorker'
end
#
@@ -750,13 +761,6 @@ Settings.gitlab_kas['internal_url'] ||= 'grpc://localhost:8153'
#
Settings['repositories'] ||= Settingslogic.new({})
Settings.repositories['storages'] ||= {}
-unless Settings.repositories.storages['default']
- Settings.repositories.storages['default'] ||= {}
- # We set the path only if the default storage doesn't exist, in case it exists
- # but follows the pre-9.0 configuration structure. `6_validations.rb` initializer
- # will validate all storages and throw a relevant error to the user if necessary.
- Settings.repositories.storages['default']['path'] ||= Settings.gitlab['user_home'] + '/repositories/'
-end
Settings.repositories.storages.each do |key, storage|
Settings.repositories.storages[key] = Gitlab::GitalyClient::StorageSettings.new(storage)
diff --git a/config/initializers/2_gitlab.rb b/config/initializers/2_gitlab.rb
deleted file mode 100644
index 5b78a471f8a..00000000000
--- a/config/initializers/2_gitlab.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# frozen_string_literal: true
-
-require_dependency 'gitlab'
diff --git a/config/initializers/active_record_build_select.rb b/config/initializers/active_record_build_select.rb
index 48f1b1ee407..ab5a872cac6 100644
--- a/config/initializers/active_record_build_select.rb
+++ b/config/initializers/active_record_build_select.rb
@@ -9,10 +9,6 @@
# statement cache. If a different migration is then run and one of these columns is
# removed in the meantime, the query is invalid.
-ActiveRecord::Base.class_eval do
- class_attribute :enumerate_columns_in_select_statements
-end
-
module ActiveRecord
module QueryMethods
private
@@ -20,8 +16,6 @@ module ActiveRecord
def build_select(arel)
if select_values.any?
arel.project(*arel_columns(select_values.uniq))
- elsif klass.enumerate_columns_in_select_statements
- arel.project(*klass.column_names.map { |field| table[field] })
else
arel.project(@klass.arel_table[Arel.star])
end
diff --git a/config/initializers/active_record_lifecycle.rb b/config/initializers/active_record_lifecycle.rb
index 4d63ffaf711..75991c9da35 100644
--- a/config/initializers/active_record_lifecycle.rb
+++ b/config/initializers/active_record_lifecycle.rb
@@ -14,7 +14,7 @@ end
if defined?(ActiveRecord::Base)
Gitlab::Cluster::LifecycleEvents.on_before_fork do
- raise 'ActiveRecord connection not established. Unable to start.' unless Gitlab::Database.exists?
+ raise 'ActiveRecord connection not established. Unable to start.' unless Gitlab::Database.main.exists?
# the following is highly recommended for Rails + "preload_app true"
# as there's no need for the master process to hold a connection
diff --git a/config/initializers/active_record_transaction_observer.rb b/config/initializers/active_record_transaction_observer.rb
new file mode 100644
index 00000000000..fc9b73d656e
--- /dev/null
+++ b/config/initializers/active_record_transaction_observer.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+return unless Gitlab.com? || Gitlab.dev_or_test_env?
+
+def feature_flags_available?
+ # When the DBMS is not available, an exception (e.g. PG::ConnectionBad) is raised
+ active_db_connection = ActiveRecord::Base.connection.active? rescue false
+
+ active_db_connection && Feature::FlipperFeature.table_exists?
+rescue ActiveRecord::NoDatabaseError
+ false
+end
+
+Gitlab::Application.configure do
+ if feature_flags_available? && ::Feature.enabled?(:active_record_transactions_tracking, type: :ops, default_enabled: :yaml)
+ Gitlab::Database::Transaction::Observer.register!
+ end
+end
diff --git a/config/initializers/active_record_transaction_patches.rb b/config/initializers/active_record_transaction_patches.rb
new file mode 100644
index 00000000000..bf92ec73c80
--- /dev/null
+++ b/config/initializers/active_record_transaction_patches.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+if ENV['ACTIVE_RECORD_DISABLE_TRANSACTION_METRICS_PATCHES'].blank?
+ Gitlab::Database.install_transaction_metrics_patches!
+end
+
+return unless Gitlab.com? || Gitlab.dev_or_test_env?
+
+if ENV['ACTIVE_RECORD_DISABLE_TRANSACTION_CONTEXT_PATCHES'].blank?
+ Gitlab::Database.install_transaction_context_patches!
+end
diff --git a/config/initializers/check_decomposition_database_config.rb b/config/initializers/check_decomposition_database_config.rb
deleted file mode 100644
index f32c72efa75..00000000000
--- a/config/initializers/check_decomposition_database_config.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-ci_db_config = Gitlab::Application.config.database_configuration[Rails.env]["ci"]
-
-if ci_db_config.present?
- raise "migrations_paths setting for ci database must be `db/ci_migrate`" unless ci_db_config["migrations_paths"] == 'db/ci_migrate'
-end
diff --git a/config/initializers/console_message.rb b/config/initializers/console_message.rb
index 2c05c2c9a24..5e9e7a7a9af 100644
--- a/config/initializers/console_message.rb
+++ b/config/initializers/console_message.rb
@@ -10,8 +10,8 @@ if Gitlab::Runtime.console?
puts " GitLab:".ljust(justify) + "#{Gitlab::VERSION} (#{Gitlab.revision}) #{Gitlab.ee? ? 'EE' : 'FOSS'}"
puts " GitLab Shell:".ljust(justify) + "#{Gitlab::VersionInfo.parse(Gitlab::Shell.version)}"
- if Gitlab::Database.exists?
- puts " #{Gitlab::Database.human_adapter_name}:".ljust(justify) + Gitlab::Database.version
+ if Gitlab::Database.main.exists?
+ puts " #{Gitlab::Database.main.human_adapter_name}:".ljust(justify) + Gitlab::Database.main.version
Gitlab.ee do
if Gitlab::Geo.connected? && Gitlab::Geo.enabled?
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index c19fb65017f..3c6606066cd 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -2,11 +2,16 @@
csp_settings = Settings.gitlab.content_security_policy
+csp_settings['enabled'] = Gitlab::ContentSecurityPolicy::ConfigLoader.default_enabled if csp_settings['enabled'].nil?
+csp_settings['report_only'] = false if csp_settings['report_only'].nil?
+csp_settings['directives'] ||= {}
+
if csp_settings['enabled']
+ csp_settings['directives'] = ::Gitlab::ContentSecurityPolicy::ConfigLoader.default_directives if csp_settings['directives'].empty?
+
# See https://guides.rubyonrails.org/security.html#content-security-policy
Rails.application.config.content_security_policy do |policy|
- directives = csp_settings.fetch('directives', {})
- loader = ::Gitlab::ContentSecurityPolicy::ConfigLoader.new(directives)
+ loader = ::Gitlab::ContentSecurityPolicy::ConfigLoader.new(csp_settings['directives'].to_h)
loader.load(policy)
end
diff --git a/config/initializers/database_config.rb b/config/initializers/database_config.rb
index 6637080c038..6bdd0e377da 100644
--- a/config/initializers/database_config.rb
+++ b/config/initializers/database_config.rb
@@ -20,15 +20,11 @@ Gitlab.ee do
end
end
-db_config = Gitlab::Database.config ||
- Rails.application.config.database_configuration[Rails.env]
-
-db_config['pool'] = Gitlab::Database.default_pool_size
-ActiveRecord::Base.establish_connection(db_config)
+ActiveRecord::Base.establish_connection(Gitlab::Database.main.db_config_with_default_pool_size)
Gitlab.ee do
if Gitlab::Runtime.sidekiq? && Gitlab::Geo.geo_database_configured?
- Rails.configuration.geo_database['pool'] = Gitlab::Database.default_pool_size
+ Rails.configuration.geo_database['pool'] = Gitlab::Database.main.default_pool_size
Geo::TrackingBase.establish_connection(Rails.configuration.geo_database)
end
end
diff --git a/config/initializers/forbid_sidekiq_in_transactions.rb b/config/initializers/forbid_sidekiq_in_transactions.rb
index 85ec8cad0a3..ba5c1340b10 100644
--- a/config/initializers/forbid_sidekiq_in_transactions.rb
+++ b/config/initializers/forbid_sidekiq_in_transactions.rb
@@ -20,7 +20,7 @@ module Sidekiq
module NoEnqueueingFromTransactions
%i(perform_async perform_at perform_in).each do |name|
define_method(name) do |*args|
- if !Sidekiq::Worker.skip_transaction_check && Gitlab::Database.inside_transaction?
+ if !Sidekiq::Worker.skip_transaction_check && Gitlab::Database.main.inside_transaction?
begin
raise Sidekiq::Worker::EnqueueFromTransactionError, <<~MSG
`#{self}.#{name}` cannot be called inside a transaction as this can lead to
diff --git a/config/initializers/gitlab_experiment.rb b/config/initializers/gitlab_experiment.rb
index 40c706ea922..5582c642b3c 100644
--- a/config/initializers/gitlab_experiment.rb
+++ b/config/initializers/gitlab_experiment.rb
@@ -1,11 +1,64 @@
# frozen_string_literal: true
Gitlab::Experiment.configure do |config|
+ # The base experiment class that will be instantiated when using the
+ # `experiment` DSL, is our ApplicationExperiment. If a custom experiment
+ # class is resolvable by the experiment name, that will be instantiated
+ # instead -- which can then inherit from whatever else it wants to.
+ #
+ # Custom experiment classes can be defined in /app/experiments.
+ #
config.base_class = 'ApplicationExperiment'
+
+ # Mount the engine and middleware at a gitlab friendly style path.
+ #
+ # The middleware currently focuses only on handling redirection logic, which
+ # is used for instrumenting urls in places where urls are otherwise not
+ # possible to instrument. Emails, and markdown content being among the top
+ # places where this can be useful.
+ #
config.mount_at = '/-/experiment'
+
+ # We use a long lived redis cache to increase the performance of experiments.
+ #
+ # Experiments can implement exclusionary and segmentation logic that can be
+ # expensive, and so to better handle these cases, once a variant is assigned
+ # to a given context, it's "sticky" to that context. This cache check is one
+ # of the first things in the process of variant resolution, and so if one is
+ # cached, no further logic is executed in resolving variant assignment.
+ #
+ # This means that there's no easy way to currently move a context from one
+ # variant to another. Future tooling will make this easier, but implementing
+ # a custom cache for your experiment may be required in edge cases.
+ #
config.cache = Gitlab::Experiment::Cache::RedisHashStore.new(
- pool: ->(&block) { Gitlab::Redis::SharedState.with { |redis| block.call(redis) } }
+ pool: ->(&block) { Gitlab::Redis::SharedState.with(&block) }
)
+
+ # The middleware instruments and redirects urls, but we don't want this to be
+ # exploited or used to send people from a trusted site to a nefarious one. So
+ # we validate urls before redirecting them.
+ #
+ # This behavior doesn't make perfect sense for self managed installs either,
+ # so we don't think we should redirect in those cases.
+ #
+ valid_domains = %w[about.gitlab.com docs.gitlab.com gitlab.com]
+ config.redirect_url_validator = lambda do |url|
+ Gitlab.dev_env_or_com? && (url = URI.parse(url)) && valid_domains.include?(url.host)
+ rescue URI::InvalidURIError
+ false
+ end
+
+ # Experiments are instrumented using an event based system by default. This
+ # can be overridden in your experiment by specifying a `#track` method.
+ #
+ # The basic behavior though, is to accept any details and pass them along to
+ # snowplow, with an included gitlab_experiment schema, that has various
+ # details about the experiment, like name and variant assignment.
+ #
+ # This uses the Gitlab::Tracking interface, so arbitrary event properties are
+ # permitted, and will be sent along using Gitlab::Tracking::StandardContext.
+ #
config.tracking_behavior = lambda do |action, event_args|
Gitlab::Tracking.event(name, action.to_s, **event_args.merge(
context: (event_args[:context] || []) << SnowplowTracker::SelfDescribingJson.new(
diff --git a/config/initializers/load_balancing.rb b/config/initializers/load_balancing.rb
index f3c977893ba..2b58ae0f642 100644
--- a/config/initializers/load_balancing.rb
+++ b/config/initializers/load_balancing.rb
@@ -1,12 +1,19 @@
# frozen_string_literal: true
+ActiveRecord::Base.singleton_class.attr_accessor :load_balancing_proxy
+
if Gitlab::Database::LoadBalancing.enable?
- Gitlab::Database.disable_prepared_statements
+ Gitlab::Database.main.disable_prepared_statements
Gitlab::Application.configure do |config|
config.middleware.use(Gitlab::Database::LoadBalancing::RackMiddleware)
end
+ # This hijacks the "connection" method to ensure both
+ # `ActiveRecord::Base.connection` and all models use the same load
+ # balancing proxy.
+ ActiveRecord::Base.singleton_class.prepend(Gitlab::Database::LoadBalancing::ActiveRecordProxy)
+
Gitlab::Database::LoadBalancing.configure_proxy
# This needs to be executed after fork of clustered processes
diff --git a/config/initializers/rails_asset_host.rb b/config/initializers/rails_asset_host.rb
new file mode 100644
index 00000000000..6fa934f2bd1
--- /dev/null
+++ b/config/initializers/rails_asset_host.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+if Gitlab.config.gitlab.cdn_host.present?
+ Rails.application.configure do
+ config.after_initialize do
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server
+ Rails.application.config.action_controller.asset_host = Gitlab.config.gitlab.cdn_host
+
+ # If ActionController::Base is called before this initializer, then we must set
+ # the configuration directly.
+ # See https://github.com/rails/rails/issues/16209
+ ActionController::Base.asset_host = Gitlab.config.gitlab.cdn_host
+ end
+ end
+end
diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb
index 530d7342d57..204d4d88f0a 100644
--- a/config/initializers/session_store.rb
+++ b/config/initializers/session_store.rb
@@ -27,5 +27,5 @@ Gitlab::Application.config.session_store(
secure: Gitlab.config.gitlab.https,
httponly: true,
expires_in: Settings.gitlab['session_expire_delay'] * 60,
- path: Rails.application.config.relative_url_root.nil? ? '/' : Gitlab::Application.config.relative_url_root
+ path: Rails.application.config.relative_url_root.presence || '/'
)
diff --git a/config/initializers/smtp_settings.rb.sample b/config/initializers/smtp_settings.rb.sample
index 4a50c29143d..eefc2253122 100644
--- a/config/initializers/smtp_settings.rb.sample
+++ b/config/initializers/smtp_settings.rb.sample
@@ -9,6 +9,7 @@
if Rails.env.production?
Rails.application.config.action_mailer.delivery_method = :smtp
+ secrets = Gitlab::Email::SmtpConfig.secrets
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
@@ -16,6 +17,10 @@ if Rails.env.production?
port: 465,
user_name: "smtp",
password: "123456",
+ ## If you are using encrypted smtp credentials then you should instead use the secrets user_name/password
+ ## See: https://docs.gitlab.com/ee/administration/raketasks/smtp.html#secrets
+ # user_name: secrets.username,
+ # password: secrets.password,
domain: "gitlab.company.com",
authentication: :login,
enable_starttls_auto: true,
@@ -31,6 +36,7 @@ end
#
# if Rails.env.production?
# Rails.application.config.action_mailer.delivery_method = :smtp_pool
+# secrets = Gitlab::Email::SmtpConfig.secrets
#
# ActionMailer::Base.delivery_method = :smtp_pool
# ActionMailer::Base.smtp_pool_settings = {
@@ -40,6 +46,10 @@ end
# port: 465,
# user_name: "smtp",
# password: "123456",
+# ## If you are using encrypted smtp credentials then you should instead use the secrets user_name/password
+# ## See: https://docs.gitlab.com/ee/administration/raketasks/smtp.html#secrets
+# # user_name: secrets.username,
+# # password: secrets.password,
# domain: "gitlab.company.com",
# authentication: :login,
# enable_starttls_auto: true,
diff --git a/config/initializers/transaction_metrics.rb b/config/initializers/transaction_metrics.rb
deleted file mode 100644
index 0175d487e66..00000000000
--- a/config/initializers/transaction_metrics.rb
+++ /dev/null
@@ -1,3 +0,0 @@
-# frozen_string_literal: true
-
-Gitlab::Database.install_monkey_patches