Active Record 数据库配置
ActiveRecord::DatabaseConfigurations
返回一个 DatabaseConfig
对象的数组,这些对象是根据应用程序的数据库配置哈希或 URL 字符串构建的。
应用程序中的 DatabaseConfig
对象数组默认设置为 HashConfig
或 UrlConfig
。您可以使用 ActiveRecord::Base.configurations
检索应用程序的配置。
如果您注册了自定义处理程序,则会根据处理程序的条件创建对象。有关注册自定义处理程序的更多信息,请参见 ::register_db_config_handler
。
- 类 ActiveRecord::DatabaseConfigurations::HashConfig
- 类 ActiveRecord::DatabaseConfigurations::InvalidConfigurationError
- 类 ActiveRecord::DatabaseConfigurations::UrlConfig
- B
- C
- E
- F
- N
- R
属性
[R] | configurations |
类公共方法
new(configurations = {}) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/database_configurations.rb, line 73 def initialize(configurations = {}) @configurations = build_configs(configurations) end
register_db_config_handler(&block) 链接
允许应用程序为数据库配置对象注册自定义处理程序。这对于创建响应应用程序需要的但 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
键的配置,将创建 VitessConfig
对象而不是 UrlConfig
。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/database_configurations.rb, line 61 def self.register_db_config_handler(&block) db_config_handlers << block end
实例公共方法
configs_for(env_name: nil, name: nil, config_key: nil, include_hidden: false) 链接
收集环境的配置,并可选地收集传递的规范名称。要包含副本配置,请传递 include_hidden: true
。
如果提供了名称,则将返回单个 DatabaseConfig
对象,否则将返回与请求的环境和类型相对应的 DatabaseConfig
对象数组。
选项
-
env_name:
环境名称。默认值为nil
,它将收集所有环境的配置。 -
name:
数据库配置名称(例如,primary、animals 等)。默认值为nil
。如果没有指定env_name
,则将返回默认环境的配置和传递的name
。 -
config_key:
选择配置哈希中包含特定键的配置。这对于选择使用自定义数据库配置处理程序的配置或查找包含特定键的哈希的配置很有用。 -
include_hidden:
确定是否在返回的列表中包含副本和被database_tasks: false
隐藏的配置。在大多数情况下,我们只迭代主连接(例如,迁移不需要为写入和读取连接运行)。默认值为false
。
来源:显示 | 在 GitHub 上
# 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
empty?() 链接
检查应用程序的配置是否为空。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/database_configurations.rb, line 150 def empty? configurations.empty? end
find_db_config(env) 链接
根据请求的环境返回单个 DatabaseConfig
对象。
如果应用程序有多个数据库,find_db_config
将返回该环境的第一个 DatabaseConfig
。
来源:显示 | 在 GitHub 上
# 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