класс 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, вместо объекта UrlConfig будет создан объект VitessConfig.
Публичные методы экземпляра
# 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
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.