Active Record 資料庫設定
ActiveRecord::DatabaseConfigurations
傳回一個陣列,此陣列包含從應用程式的資料庫設定雜湊值或 URL 字串建置而成的 DatabaseConfig
物件。
應用程式中的 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 設定可以回應「已分片」的狀況。若要執行此動作,請在初始化程式中定義下列內容:
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