Fix ActiveRecord using two connection pools when no replica is defined (#27061)
This commit is contained in:
		@@ -1,11 +1,24 @@
 | 
				
			|||||||
# frozen_string_literal: true
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module DatabaseHelper
 | 
					module DatabaseHelper
 | 
				
			||||||
 | 
					  def replica_enabled?
 | 
				
			||||||
 | 
					    ENV['REPLICA_DB_NAME'] || ENV.fetch('REPLICA_DATABASE_URL', nil)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  module_function :replica_enabled?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def with_read_replica(&block)
 | 
					  def with_read_replica(&block)
 | 
				
			||||||
    ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block)
 | 
					    if replica_enabled?
 | 
				
			||||||
 | 
					      ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block)
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      yield
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def with_primary(&block)
 | 
					  def with_primary(&block)
 | 
				
			||||||
    ApplicationRecord.connected_to(role: :writing, &block)
 | 
					    if replica_enabled?
 | 
				
			||||||
 | 
					      ApplicationRecord.connected_to(role: :writing, &block)
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      yield
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@ class ApplicationRecord < ActiveRecord::Base
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  include Remotable
 | 
					  include Remotable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  connects_to database: { writing: :primary, reading: ENV['REPLICA_DB_NAME'] || ENV['REPLICA_DATABASE_URL'] ? :replica : :primary }
 | 
					  connects_to database: { writing: :primary, reading: :replica } if DatabaseHelper.replica_enabled?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  class << self
 | 
					  class << self
 | 
				
			||||||
    def update_index(_type_name, *_args, &_block)
 | 
					    def update_index(_type_name, *_args, &_block)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user