class ActiveRecord::DatabaseConfigurations
Настройки базы данных Active Record
ActiveRecord::DatabaseConfigurations возвращает массив DatabaseConfig объектов, созданных на основе конфигурации базы данных приложения или строки URL.
Массив DatabaseConfig объектов в приложении по умолчанию задаётся либо HashConfig, либо UrlConfig. Вы можете получить конфигурацию приложения, используя ActiveRecord::Base.configurations.
Если вы зарегистрируете обработчик, объекты будут создаваться в соответствии с условиями обработчика. Дополнительную информацию о регистрации пользовательских обработчиков см. в ::register_db_config_handler.
Атрибуты
Публичные методы класса
# File activerecord/lib/active_record/database_configurations.rb, line 73
def initialize(configurations = {})
@configurations = build_configs(configurations)
end # File activerecord/lib/active_record/database_configurations.rb, line 61 def self.register_db_config_handler(&block) db_config_handlers << block end
Позволяет приложению зарегистрировать пользовательский обработчик для объектов конфигурации базы данных. Это полезно для создания пользовательского обработчика, который отвечает на методы, необходимые вашему приложению, но не реализуемые Active Record. Например, если вы используете Vitess, вы можете захотеть, чтобы ваши конфигурации Vitess отвечали на запрос «фрагментирован?». Для этого определите следующее в файле инициализации:
ActiveRecord::DatabaseConfigurations.register_db_config_handler do |env_name, name, url, config| next unless config.key?(:vitess) VitessConfig.new(env_name, name, config) end
Примечание: приложения должны обрабатывать условие, при котором пользовательский конфиг должен быть создан в вашем обработчике, иначе все объекты будут использовать пользовательский обработчик.
Затем определите ваш VitessConfig для ответа на методы, необходимые вашему приложению. Рекомендуется наследовать от одного из существующих классов конфигурации базы данных, чтобы избежать необходимости повторной реализации всех методов. Пользовательские обработчики конфигурации должны реализовывать только те методы, которые не реализованы в Active Record.
class VitessConfig < ActiveRecord::DatabaseConfigurations::UrlConfig
def sharded?
configuration_hash.fetch("sharded", false)
end
end
Для конфигураций, имеющих ключ :vitess, будет создан объект VitessConfig, а не UrlConfig.
Публичные методы экземпляра
# File activerecord/lib/active_record/database_configurations.rb, line 98
def configs_for(env_name: nil, name: nil, config_key: nil, include_hidden: false)
env_name ||= default_env if name
configs = env_with_configs(env_name)
unless include_hidden
configs = configs.select do |db_config|
db_config.database_tasks?
end
end
if config_key
configs = configs.select do |db_config|
db_config.configuration_hash.key?(config_key)
end
end
if name
configs.find do |db_config|
db_config.name == name.to_s
end
else
configs
end
end Сбор конфигураций для среды и, необязательно, имени спецификации. Чтобы включить реплики, передайте include_hidden: true.
Если имя указано, будет возвращен один объект DatabaseConfig, в противном случае — массив DatabaseConfig объектов, соответствующих запрошенной среде и типу.
Параметры
-
env_name:Имя среды. По умолчаниюnil, что соберет конфигурации для всех сред. -
name:Имя конфигурации базы данных (например, primary, animals и т. д.). По умолчаниюnil. Еслиenv_nameне указан, возвращаются конфигурации для среды по умолчанию и переданногоname. -
config_key:Выбирает конфигурации, содержащие определенный ключ в хэше конфигурации. Полезно для выбора конфигураций, использующих пользовательский обработчик конфигурации базы данных, или поиска конфигураций с хэшами, содержащими определенный ключ. -
include_hidden:Определяет, следует ли включать реплики и конфигурации, скрытыеdatabase_tasks: false, в возвращаемый список. Большинство времени мы итерируем только по первичным соединениям (т. е. миграции не должны выполняться для подключения записи и чтения). По умолчаниюfalse.
# File activerecord/lib/active_record/database_configurations.rb, line 150 def empty? configurations.empty? end
Проверяет, пуста ли конфигурация базы данных приложения.
# File activerecord/lib/active_record/database_configurations.rb, line 127
def find_db_config(env)
env = env.to_s
configurations.find do |db_config|
db_config.for_current_env? && (db_config.env_name == env || db_config.name == env)
end || configurations.find do |db_config|
db_config.env_name == env
end
end Возвращает один объект DatabaseConfig на основе запрошенной среды.
Если у приложения несколько баз данных, find_db_config вернёт первый DatabaseConfig для среды.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.