我正在开发一个使用 ActiveRecord 进行数据库访问的应用程序,但不使用模型类等 ORM 功能 - 查询全部使用文字 SQL 进行并调用
exec_query
。
我想使用 ActiveRecord 中对多个数据库的支持,以便有选择地选择使用与数据库的只读连接,但无法弄清楚如何在以下应用程序中实现此功能不使用模型类。
使用模型类(来自文档),我可以做出如下声明:
class MyBaseModel < ActiveRecord::Base
self.abstract_class = true
connects_to database: { writing: :primary, reading: :primary_replica }
end
然后使用例如手动切换到阅读上下文:
ActiveRecord::Base.connected_to(role: :reading) do
SomeChildModel.find id
end
有没有一种方法可以声明用于读取角色的数据库连接(除了用于写入的默认连接之外),然后能够选择在特定上下文中使用该角色(对某个角色进行 exec_query
调用)连接对象),以便 ActiveRecord 能够在切换上下文时在后台正确管理连接池,就像上面配置的模型类一样?
ActiveRecord::Base.connected_to(role: :reading) do
# all code in this block will be connected to the reading role
end
该块中没有任何内容需要代码来引用类或模型。还有
来自文档的更多内容:
在某些情况下,您可能希望应用程序连接到写入器或副本,而自动连接切换是不够的。例如,您可能知道,对于特定请求,您始终希望将请求发送到副本,即使您处于 POST 请求路径中也是如此。您需要做的就是在为此,Rails 提供了connected_to 方法,该方法将切换到您需要的连接。
database.yml
文件中定义其他数据库,根据文档。