admin管理员组

文章数量:1356560

Background After upgrading from Rails 6.1.7 to Rails 7.1.5, we encountered an issue where writes are being executed on the wrong shard, despite explicitly specifying the target shard.

Expected Behavior Executing queries within a MyModel::connected_to(role: :writing, shard: :shard_name) block should direct all operations to the specified shard.

Writes should always occur on the correct shard as defined in database.yml.

Observed Behavior Writes are going to the incorrect shard, even when explicitly switching connections.

In Rails 6.1.7, shard switching worked correctly.

Reversing the order of shards in connects_to causes writes to go to the other shard instead.

Reproduction Steps Rails Version: 7.1.5

Database Adapter: PostgreSQL

Configuration (database.yml)

production:
primary:
adapter: postgresql
database: dashboard
username: user
password: password

shard_one:
writing:
adapter: postgresql
database: serve
username: user
password: password

shard_two:
writing:
adapter: postgresql
database: serve
username: user
password: password

Model Configuration (ServeRecord)

class ServeRecord < ActiveRecord::Base
self.abstract_class = true
connects_to shards: {
shard_one: { writing: :shard_one, reading: :shard_one },
shard_two: { writing: :shard_two, reading: :shard_two }
}
end

Unexpected Behavior in Shard Switching

MyModel.connected_to(role: :writing, shard: :shard_one) do
puts "Current DB: #{ServeRecord.connection.current_database}" # Outputs correct DB name
User.create!(name: "Test User") # Unexpectedly writes to shard_two
end

Expected: The User record should be created in shard_one.

Observed: The record is incorrectly written to shard_two.

Questions / Request for Help Is this a bug in Rails 7.1.5’? Are there any additional configurations required in Rails 7+ to ensure shard switching behaves correctly?

Would appreciate any guidance or insights.

本文标签: rubyWrites Going to the Wrong Shard After Upgrading to Rails 715Stack Overflow