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 реагировали на ‘sharded?`. Для этого определите следующее в файле инициализации:
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.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.