~cytrogen/masto-fe

26e522ac55d4147b0418abcf7e16bb70cd3f0af5 — Eugen Rochko 2 years ago b923a4c
Fix not actually connecting to the configured replica (#25977)

3 files changed, 34 insertions(+), 14 deletions(-)

M app/helpers/database_helper.rb
M app/models/application_record.rb
M config/database.yml
M app/helpers/database_helper.rb => app/helpers/database_helper.rb +2 -2
@@ 2,10 2,10 @@

module DatabaseHelper
  def with_read_replica(&block)
    ApplicationRecord.connected_to(role: :read, prevent_writes: true, &block)
    ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block)
  end

  def with_primary(&block)
    ApplicationRecord.connected_to(role: :primary, &block)
    ApplicationRecord.connected_to(role: :writing, &block)
  end
end

M app/models/application_record.rb => app/models/application_record.rb +2 -0
@@ 5,6 5,8 @@ class ApplicationRecord < ActiveRecord::Base

  include Remotable

  connects_to database: { writing: :primary, reading: :read }

  class << self
    def update_index(_type_name, *_args, &_block)
      super if Chewy.enabled?

M config/database.yml => config/database.yml +30 -12
@@ 8,23 8,41 @@ default: &default
  application_name: ''

development:
  <<: *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'] %>
  primary:
    <<: *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'] %>
  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
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *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'] %>
  primary:
    <<: *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'] %>
  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:
  primary: