mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
8d32346cde
When I wrote the `connected_to` and `connects_to` API's I wrote them with the idea in mind that it didn't really matter what the handlers/roles were called as long as those connecting to the roles knew which one wrote and which one read. With the introduction of the middleware Rails begins to assume it's `writing` and `reading` and there's no room for other roles. At GitHub we've been using this method for a long time so we have a ton of legacy code that uses different handler names `default` and `readonly`. We could rename all our code but I think this is better for a few reasons: - Legacy apps that have been using multiple databases for a long time can have an eaiser time switching. - If we later find this to cause more issues than it's worth we can easily deprecate. - We won't force old apps to rewrite the resolver middleware just to use a different handler. Adding the writing_role/reading_role required that I move the code that creates the first handler for writing to the railtie. If I didn't move this the core class would assign the handler before I was able to assign a new one in my configuration and I'd end up with 3 handlers instead of 2.
29 lines
951 B
Ruby
29 lines
951 B
Ruby
# frozen_string_literal: true
|
|
|
|
require "active_support/logger"
|
|
require "models/college"
|
|
require "models/course"
|
|
require "models/professor"
|
|
require "models/other_dog"
|
|
|
|
module ARTest
|
|
def self.connection_name
|
|
ENV["ARCONN"] || config["default_connection"]
|
|
end
|
|
|
|
def self.connection_config
|
|
config.fetch("connections").fetch(connection_name) do
|
|
puts "Connection #{connection_name.inspect} not found. Available connections: #{config['connections'].keys.join(', ')}"
|
|
exit 1
|
|
end
|
|
end
|
|
|
|
def self.connect
|
|
puts "Using #{connection_name}"
|
|
ActiveRecord::Base.logger = ActiveSupport::Logger.new("debug.log", 0, 100 * 1024 * 1024)
|
|
ActiveRecord::Base.connection_handlers = { ActiveRecord::Base.writing_role => ActiveRecord::Base.default_connection_handler }
|
|
ActiveRecord::Base.configurations = connection_config
|
|
ActiveRecord::Base.establish_connection :arunit
|
|
ARUnit2Model.establish_connection :arunit2
|
|
end
|
|
end
|