123456789_123456789_123456789_123456789_123456789_

Class: ActiveRecord::DatabaseConfigurations::HashConfig

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: ActiveRecord::DatabaseConfigurations::DatabaseConfig
Defined in: activerecord/lib/active_record/database_configurations/hash_config.rb

Overview

Active Record Database Hash Config

A HashConfig object is created for each database configuration entry that is created from a hash.

A hash config:

{ "development" => { "database" => "db_name" } }

Becomes:

#<ActiveRecord::DatabaseConfigurations::HashConfig:0x00007fd1acbded10
  @env_name="development", @name="primary", @config={database: "db_name"}>

See ::ActiveRecord::DatabaseConfigurations for more info.

Class Method Summary

DatabaseConfig - Inherited

Instance Attribute Summary

DatabaseConfig - Inherited

Instance Method Summary

Constructor Details

.new(env_name, name, configuration_hash) ⇒ HashConfig

Initialize a new HashConfig object

#### Parameters

  • env_name - The Rails environment, i.e. “development”.

  • name - The db config name. In a standard two-tier database configuration this will default to “primary”. In a multiple database three-tier database configuration this corresponds to the name used in the second tier, for example “primary_readonly”.

  • #configuration_hash - The config hash. This is the hash that contains the database adapter, name, and other important information for database connections.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 38

def initialize(env_name, name, configuration_hash)
  super(env_name, name)
  @configuration_hash = configuration_hash.symbolize_keys.freeze
  validate_configuration!
end

Instance Attribute Details

#_database=(database) (writeonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 69

def _database=(database) # :nodoc:
  @configuration_hash = configuration_hash.merge(database: database).freeze
end

#configuration_hash (readonly)

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 23

attr_reader :configuration_hash

#database_tasks?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 187

def database_tasks? # :nodoc:
  !replica? && !!configuration_hash.fetch(:database_tasks, true)
end

#primary?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 149

def primary? # :nodoc:
  Base.configurations.primary?(name)
end

#replica?Boolean (readonly)

Determines whether a database configuration is for a replica / readonly connection. If the replica key is present in the config, replica? will return true.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 47

def replica?
  configuration_hash[:replica]
end

#seeds?Boolean (readonly)

Determines whether the db:prepare task should seed the database from db/seeds.rb.

If the seeds key is present in the config, seeds? will return its value. Otherwise, it will return true for the primary database and false for all other configs.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 157

def seeds?
  configuration_hash.fetch(:seeds, primary?)
end

#use_metadata_table?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 191

def  # :nodoc:
  configuration_hash.fetch(:, true)
end

Instance Method Details

#adapter

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 127

def adapter
  configuration_hash[:adapter]&.to_s
end

#checkout_timeout

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 109

def checkout_timeout
  (configuration_hash[:checkout_timeout] || 5).to_f
end

#database

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 65

def database
  configuration_hash[:database]
end

#default_reaping_frequency (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 205

def default_reaping_frequency
  # Reap every 20 seconds by default, but run more often as necessary to
  # meet other configured timeouts.
  [20, idle_timeout, max_age, keepalive].compact.min
end

#default_schema_cache_path(db_dir = "db")

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 137

def default_schema_cache_path(db_dir = "db")
  if primary?
    File.join(db_dir, "schema_cache.yml")
  else
    File.join(db_dir, "#{name}_schema_cache.yml")
  end
end

#host

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 57

def host
  configuration_hash[:host]
end

#idle_timeout

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 117

def idle_timeout
  timeout = configuration_hash.fetch(:idle_timeout, 300).to_f
  timeout if timeout > 0
end

#keepalive

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 122

def keepalive
  keepalive = (configuration_hash[:keepalive] || 600).to_f
  keepalive if keepalive > 0
end

#lazy_schema_cache_path

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 145

def lazy_schema_cache_path
  schema_cache_path || default_schema_cache_path
end

#max_age

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 92

def max_age
  v = configuration_hash[:max_age]&.to_i
  if v && v > 0
    v
  else
    Float::INFINITY
  end
end

#max_connections Also known as: #pool

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 73

def max_connections
  (configuration_hash[:max_connections] || configuration_hash[:pool] || 5).to_i
end

#max_queue

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 105

def max_queue
  max_threads * 4
end

#max_threads

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 88

def max_threads
  (configuration_hash[:max_threads] || max_connections).to_i
end

#migrations_paths

The migrations paths for a database configuration. If the migrations_paths key is present in the config, migrations_paths will return its value.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 53

def migrations_paths
  configuration_hash[:migrations_paths]
end

#min_connections

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 77

def min_connections
  (configuration_hash[:min_connections] || 0).to_i
end

#min_threads

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 84

def min_threads
  (configuration_hash[:min_threads] || 0).to_i
end

#pool

Deprecated.

use max_connections instead

Alias for #max_connections.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 81

alias :pool :max_connections

#query_cache

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 101

def query_cache
  configuration_hash[:query_cache]
end

#reaping_frequency

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 113

def reaping_frequency # :nodoc:
  configuration_hash.fetch(:reaping_frequency, default_reaping_frequency)&.to_f
end

#schema_cache_path

The path to the schema cache dump file for a database. If omitted, the filename will be read from ENV or a default will be derived.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 133

def schema_cache_path
  configuration_hash[:schema_cache_path]
end

#schema_dump(format = schema_format)

Determines whether to dump the schema/structure files and the filename that should be used.

If :schema_dump is set to false or nil the schema will not be dumped.

If the config option is set that will be used. Otherwise Rails will generate the filename from the database config name.

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 169

def schema_dump(format = schema_format)
  if configuration_hash.key?(:schema_dump)
    if config = configuration_hash[:schema_dump]
      config
    end
  elsif primary?
    schema_file_type(format)
  else
    "#{name}_#{schema_file_type(format)}"
  end
end

#schema_file_type(format) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 196

def schema_file_type(format)
  case format.to_sym
  when :ruby
    "schema.rb"
  when :sql
    "structure.sql"
  end
end

#schema_format

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 181

def schema_format # :nodoc:
  format = configuration_hash.fetch(:schema_format, ActiveRecord.schema_format).to_sym
  raise "Invalid schema format" unless [:ruby, :sql].include?(format)
  format
end

#socket

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 61

def socket # :nodoc:
  configuration_hash[:socket]
end

#validate_configuration! (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/database_configurations/hash_config.rb', line 211

def validate_configuration!
  if configuration_hash[:pool] && configuration_hash[:max_connections]
    pool_val = configuration_hash[:pool].to_i
    max_conn_val = configuration_hash[:max_connections].to_i

    if pool_val != max_conn_val
      raise "Ambiguous configuration: 'pool' (#{pool_val}) and 'max_connections' (#{max_conn_val}) are set to different values. Prefer just 'max_connections'."
    end
  end

  if configuration_hash[:pool] && configuration_hash[:min_connections]
    raise "Ambiguous configuration: when setting 'min_connections', use 'max_connections' instead of 'pool'."
  end
end