Skip to content
Snippets Groups Projects
current_settings.rb 1.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Gitlab
      module CurrentSettings
        def current_application_settings
    
          if RequestStore.active?
            RequestStore.fetch(:current_application_settings) { ensure_application_settings! }
          else
            ensure_application_settings!
          end
        end
    
          return fake_application_settings unless connect_to_db?
    
          unless ENV['IN_MEMORY_APPLICATION_SETTINGS'] == 'true'
    
              settings = ::ApplicationSetting.current
    
            # In case Redis isn't running or the Redis UNIX socket file is not available
            rescue ::Redis::BaseError, ::Errno::ENOENT
              settings = ::ApplicationSetting.last
            end
    
            settings ||= ::ApplicationSetting.create_from_defaults unless ActiveRecord::Migrator.needs_migration?
    
          settings || in_memory_application_settings
    
          current_application_settings.sidekiq_throttling_enabled?
    
        def in_memory_application_settings
    
          @in_memory_application_settings ||= ::ApplicationSetting.new(::ApplicationSetting.defaults)
    
        # In case migrations the application_settings table is not created yet,
        # we fallback to a simple OpenStruct
    
        rescue ActiveRecord::StatementInvalid, ActiveRecord::UnknownAttributeError
    
        def fake_application_settings
    
          OpenStruct.new(::ApplicationSetting.defaults)
    
          # 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 &&
    
            ActiveRecord::Base.connection.table_exists?('application_settings')
    
        rescue ActiveRecord::NoDatabaseError
          false