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 75
def initialize(configurations = {})
@configurations = build_configs(configurations)
end # File activerecord/lib/active_record/database_configurations.rb, line 63 def self.register_db_config_handler(&block) db_config_handlers << block end
Позволяет приложению зарегистрировать собственный обработчик объектов конфигурации базы данных. Это полезно, если нужно создать обработчик, поддерживающий методы, необходимые приложению, но не реализованные в Active Record. Например, если вы используете Vitess, может потребоваться, чтобы конфигурации Vitess поддерживали метод ‘sharded?`. Для этого добавьте в инициализатор следующий код:
ActiveSupport.on_load(:active_record_database_configurations) do
ActiveRecord::DatabaseConfigurations.register_db_config_handler do |env_name, name, url, config|
next unless config.key?(:vitess)
VitessConfig.new(env_name, name, config)
end
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 100
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 152 def empty? configurations.empty? end
Проверяет, пуста ли конфигурация приложения.
# File activerecord/lib/active_record/database_configurations.rb, line 129
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.