未验证 提交 d4ebba27 编写于 作者: S Santiago Bartesaghi 提交者: eileencodes

Fix #39205 ReadOnlyError when on writing connection

上级 ed29afcc
......@@ -190,7 +190,7 @@ def enlist_fixture_connections
# need to share a connection pool so that the reading connection
# can see data in the open transaction on the writing connection.
def setup_shared_connection_pool
writing_handler = ActiveRecord::Base.connection_handler
writing_handler = ActiveRecord::Base.connection_handlers[ActiveRecord::Base.writing_role]
ActiveRecord::Base.connection_handlers.values.each do |handler|
if handler != writing_handler
......
......@@ -1418,3 +1418,52 @@ def with_temporary_connection_pool
end
end
end
class UsesWritingConnectionForFixtures < ActiveRecord::TestCase
include ActiveRecord::TestFixtures
self.use_transactional_tests = true
fixtures :dogs
def setup
@old_handler = ActiveRecord::Base.connection_handler
@old_handlers = ActiveRecord::Base.connection_handlers
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
db_config = ActiveRecord::DatabaseConfigurations::HashConfig.new(ENV["RAILS_ENV"], "readonly", readonly_config)
handler = ActiveRecord::ConnectionAdapters::ConnectionHandler.new
handler.establish_connection(db_config)
ActiveRecord::Base.connection_handlers = {}
ActiveRecord::Base.connection_handler = handler
ActiveRecord::Base.connects_to(database: { writing: :default, reading: :readonly })
end
def teardown
ActiveRecord::Base.configurations = @prev_configs
ActiveRecord::Base.connection_handler = @old_handler
ActiveRecord::Base.connection_handlers = @old_handlers
end
def test_uses_writing_connection_for_fixtures
ActiveRecord::Base.connected_to(role: :reading) do
Dog.first
assert_nothing_raised do
ActiveRecord::Base.connected_to(role: :writing) { Dog.create! alias: "Doggo" }
end
end
end
private
def config
{ "default" => default_config, "readonly" => readonly_config }
end
def default_config
{ "adapter" => "sqlite3", "database" => "test/fixtures/fixture_database.sqlite3" }
end
def readonly_config
default_config.merge("replica" => true)
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册