Fix not actually connecting to the configured replica (#25977)

This commit is contained in:
Eugen Rochko 2023-07-17 08:26:52 +02:00 committed by GitHub
parent b923a4c755
commit 26e522ac55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 34 additions and 14 deletions

View File

@ -2,10 +2,10 @@
module DatabaseHelper module DatabaseHelper
def with_read_replica(&block) def with_read_replica(&block)
ApplicationRecord.connected_to(role: :read, prevent_writes: true, &block) ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block)
end end
def with_primary(&block) def with_primary(&block)
ApplicationRecord.connected_to(role: :primary, &block) ApplicationRecord.connected_to(role: :writing, &block)
end end
end end

View File

@ -5,6 +5,8 @@ class ApplicationRecord < ActiveRecord::Base
include Remotable include Remotable
connects_to database: { writing: :primary, reading: :read }
class << self class << self
def update_index(_type_name, *_args, &_block) def update_index(_type_name, *_args, &_block)
super if Chewy.enabled? super if Chewy.enabled?

View File

@ -8,23 +8,41 @@ default: &default
application_name: '' application_name: ''
development: development:
<<: *default primary:
database: <%= ENV['DB_NAME'] || 'mastodon_development' %> <<: *default
username: <%= ENV['DB_USER'] %> database: <%= ENV['DB_NAME'] || 'mastodon_development' %>
password: <%= (ENV['DB_PASS'] || '').to_json %> username: <%= ENV['DB_USER'] %>
host: <%= ENV['DB_HOST'] %> password: <%= (ENV['DB_PASS'] || '').to_json %>
port: <%= ENV['DB_PORT'] %> host: <%= ENV['DB_HOST'] %>
port: <%= ENV['DB_PORT'] %>
read:
<<: *default
database: <%= ENV['DB_NAME'] || 'mastodon_development' %>
username: <%= ENV['DB_USER'] %>
password: <%= (ENV['DB_PASS'] || '').to_json %>
host: <%= ENV['DB_HOST'] %>
port: <%= ENV['DB_PORT'] %>
replica: true
# Warning: The database defined as "test" will be erased and # Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake". # re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production. # Do not set this db to the same as development or production.
test: test:
<<: *default primary:
database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %> <<: *default
username: <%= ENV['DB_USER'] %> database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %>
password: <%= (ENV['DB_PASS'] || '').to_json %> username: <%= ENV['DB_USER'] %>
host: <%= ENV['DB_HOST'] %> password: <%= (ENV['DB_PASS'] || '').to_json %>
port: <%= ENV['DB_PORT'] %> host: <%= ENV['DB_HOST'] %>
port: <%= ENV['DB_PORT'] %>
read:
<<: *default
database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %>
username: <%= ENV['DB_USER'] %>
password: <%= (ENV['DB_PASS'] || '').to_json %>
host: <%= ENV['DB_HOST'] %>
port: <%= ENV['DB_PORT'] %>
replica: true
production: production:
primary: primary: