Make Apartment compatible with Rails 7
The `database:` argument from the `connected_to` method was deprecated in Rails 6.1 [1] and removed in Rails 7.0 [2]. The ros-apartement gem has already introduced fixes for this issue [3][4], but there has been no release including these fixes. So we're applying the fix in our code. Note that, since Apartment already overwrites the `connected_to` method by creating a `connected_to_with_tenant` method, we're calling the `connected_to_without_tenant` method inside the patch, which is equivalent to ActiveRecord's original `connected_to`. [1] Pull request 37874 in https://github.com/rails/rails [2] Pull request 40530 in https://github.com/rails/rails/pull [3] Pull request 194 in https://github.com/rails-on-services/apartment [4] Pull request 243 in https://github.com/rails-on-services/apartment
This commit is contained in:
@@ -1,3 +1,20 @@
|
||||
module ActiveRecord # TODO: Remove after upgrading ros-apartment
|
||||
# Code based on the current (as of March 2024) development version of the apartment gem
|
||||
module ConnectionHandling
|
||||
def connected_to_with_rails7_tenant(role: nil, prevent_writes: false, &blk)
|
||||
current_tenant = Apartment::Tenant.current
|
||||
|
||||
# The connected_to_without_tenant method is defined by Apartment
|
||||
connected_to_without_tenant(role: role, prevent_writes: prevent_writes) do
|
||||
Apartment::Tenant.switch!(current_tenant)
|
||||
yield(blk)
|
||||
end
|
||||
end
|
||||
|
||||
alias connected_to connected_to_with_rails7_tenant
|
||||
end
|
||||
end
|
||||
|
||||
# You can have Apartment route to the appropriate Tenant by adding some Rack middleware.
|
||||
# Apartment can support many different "Elevators" that can take care of this routing to your data.
|
||||
# Require whichever Elevator you're using below or none if you have a custom one.
|
||||
|
||||
Reference in New Issue
Block a user