gpt4 book ai didi

ruby-on-rails - 更改连接 search_paths 的线程安全方式

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:57 27 4
gpt4 key购买 nike

我希望能够在 Rails 4 应用程序中的不同数据库架构之间切换。

计划是在堆栈的最开始添加一个新的中间件来为我做这件事。

唯一的方法是设置 ActiveRecord::Base.connection.schema_search_path = '"$user",my_schema'

我遇到的问题是此连接将转到池中,并且所有后续请求都将使用在第一个请求中设置的架构(基本上是通过泄漏)。

所以我看到的解决方案是始终将搜索路径重置为之前的内容,并始终在每次请求时进行设置。

但我不想这样做,因为:

  • 99% 的请求将转到默认的 (public) 模式,执行 set search_path to '$user$,my_schema' 将是额外的查询,可能有被回避了
  • 更高的泄漏风险(其他中间件可能会更早建立连接,或者对 Rails 或 gem 进行一些我无法控制的更改)

所有这些尤其适用于线程服务器,例如 Puma。

那么,对于我的带有中间件的解决方案,是否有更好的替代方案?

谢谢。

最佳答案

当您将连接返回到池中时,您必须确保池运行 DISCARD ALL; 以重置连接状态。

这将清除所有SET ROLESET SESSION AUTHORIZATION、 session 变量、search_path 设置等。

关于ruby-on-rails - 更改连接 search_paths 的线程安全方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21746181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com