Skip to content

Commit

Permalink
Fix ActiveRecord using two connection pools when no replica is defined (
Browse files Browse the repository at this point in the history
  • Loading branch information
ClearlyClaire authored and audiodude committed Oct 23, 2023
1 parent 2ef418e commit eb1f24f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
17 changes: 15 additions & 2 deletions app/helpers/database_helper.rb
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion app/models/application_record.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit eb1f24f

Please sign in to comment.