diff --git a/lib/server_settings/database_config.rb b/lib/server_settings/database_config.rb index 0f3a284..e78ec2b 100644 --- a/lib/server_settings/database_config.rb +++ b/lib/server_settings/database_config.rb @@ -4,7 +4,11 @@ def self.slave_name(name, idx) name + "_slave#{idx}" end - def self.generate_database_config(db_role, with_slave:true) + def self.replica_name(name, suffix, idx) + "#{name}_#{suffix}#{idx}" + end + + def self.generate_database_config(db_role, with_slave: true, replica_suffix: "replica") configuration = {} return configuration unless ServerSettings.databases @@ -33,6 +37,12 @@ def self.generate_database_config(db_role, with_slave:true) config[:host] = db.backup if db_role == :backup stringify_keys!(config) if defined? Rails configuration[slave_name(db.name, idx)] = config + + # AR6.1以降のDB分散機能の replica 向けの設定 + config = config.dup + config[:replica] = true + stringify_keys!(config) if defined? Rails + configuration[replica_name(db.name, replica_suffix, idx)] = config end end end diff --git a/spec/lib/server_settings/database_config_spec.rb b/spec/lib/server_settings/database_config_spec.rb index 09ee809..6f7168f 100644 --- a/spec/lib/server_settings/database_config_spec.rb +++ b/spec/lib/server_settings/database_config_spec.rb @@ -29,7 +29,7 @@ :backup: 'backup.com' no_backup: <<: *default -EOF + EOF end before do filepath = "config.yml" @@ -43,6 +43,11 @@ describe ".slave_name" do it { expect(ServerSettings::DatabaseConfig.slave_name("hoge", 1)).to eq "hoge_slave1" } end + + describe ".replica_name" do + it { expect(ServerSettings::DatabaseConfig.replica_name("hoge", "replica", 1)).to eq "hoge_replica1" } + end + describe ".generate_database_config" do context "check configuration" do let(:database_config) { database_config = ServerSettings::DatabaseConfig.generate_database_config(:master) } @@ -52,6 +57,11 @@ context "when has slave" do it "contain slave key" do expect(database_config["has_slave_slave1"].class).to eq Hash + expect(database_config["has_slave_slave1"][:replica]).to be_nil + end + it "contain replica key" do + expect(database_config["has_slave_replica1"].class).to eq Hash + expect(database_config["has_slave_replica1"][:replica]).to be true end end context "when has group" do @@ -63,6 +73,7 @@ it "does not exist slave key" do no_slave_config = ServerSettings::DatabaseConfig.generate_database_config(:master, with_slave: false) expect(no_slave_config.has_key? "has_slave_slave1").to be false + expect(no_slave_config.has_key? "has_slave_replica1").to be false end end context "when use backup role" do