Fix ActiveRecord using two connection pools when no replica is defined (#27061)
parent
e824585523
commit
39da3d86f8
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue