~cytrogen/masto-fe

39da3d86f827f1ec68560209c70f705dd0b62f0e — Claire 2 years ago e824585
Fix ActiveRecord using two connection pools when no replica is defined (#27061)

2 files changed, 16 insertions(+), 3 deletions(-)

M app/helpers/database_helper.rb
M app/models/application_record.rb
M app/helpers/database_helper.rb => app/helpers/database_helper.rb +15 -2
@@ 1,11 1,24 @@
# frozen_string_literal: true

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)
    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

  def with_primary(&block)
    ApplicationRecord.connected_to(role: :writing, &block)
    if replica_enabled?
      ApplicationRecord.connected_to(role: :writing, &block)
    else
      yield
    end
  end
end

M app/models/application_record.rb => app/models/application_record.rb +1 -1
@@ 5,7 5,7 @@ class ApplicationRecord < ActiveRecord::Base

  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
    def update_index(_type_name, *_args, &_block)