我希望能够在Rails 4应用程序中切换不同的DB模式。
计划是在栈的最开始添加一个新的中间件来为我完成此操作。
唯一的方法是通过设置ActiveRecord::Base.connection.schema_search_path = '"$user",my_schema'
来实现。
我对此的问题是,这个连接将进入连接池,并且所有后续请求都将使用第一个设置的模式(基本上泄漏了)。
因此,我认为解决方案是始终将搜索路径重置为之前的值,并在每个请求上始终进行设置。
但是,我不想这样做,因为:
- 99%的请求将转到默认(
public
)模式,执行set search_path to '$user$,my_schema'
将是可以避免的额外查询 - 泄漏风险更高(其他中间件可能会更早地建立连接,或者在我的控制范围之外对Rails或宝石进行一些更改)
所有这些都特别适用于像Puma这样的线程服务器。
那么有没有比我的中间件解决方案更好的替代方案呢?
谢谢。
ConnectionPool.checkin
和/或ConnectionPool.release_connection
。 - Craig RingerDISCARD ALL
,请参见https://github.com/rails/rails/issues/14037。您能指出关于使用DISCARD ALL
(与连接池相关)的文档/指南,以为上述Rails问题提供更多信息吗? - Dmytrii Nagirniak