diff options
Diffstat (limited to 'config/initializers')
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 |