diff --git a/app/helpers/database_helper.rb b/app/helpers/database_helper.rb index 965eeaf41d..79227bb109 100644 --- a/app/helpers/database_helper.rb +++ b/app/helpers/database_helper.rb @@ -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 diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 5d7d3a0961..23e0af3a2a 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -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? diff --git a/config/database.yml b/config/database.yml index f7ecbd9814..d1fd65a0fb 100644 --- a/config/database.yml +++ b/config/database.yml @@ -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: