Ruby on rails 在rails中切换数据库而不耗尽连接池的更好方法
目前,我在Ruby on rails 在rails中切换数据库而不耗尽连接池的更好方法,ruby-on-rails,database,multi-tenant,ruby-on-rails-6,Ruby On Rails,Database,Multi Tenant,Ruby On Rails 6,目前,我在ActiveRecord中添加了这个小功能,以允许我动态切换数据库: module ActiveRecord module ConnectionAdapters class Mysql2Adapter < AbstractMysqlAdapter # Allows us to connect to a new database in a clean way def change_database!(db) if @config[
ActiveRecord
中添加了这个小功能,以允许我动态切换数据库:
module ActiveRecord
module ConnectionAdapters
class Mysql2Adapter < AbstractMysqlAdapter
# Allows us to connect to a new database in a clean way
def change_database!(db)
if @config[:database] != db
@config.merge!(:database => db)
clear_query_cache
reconnect!
end
end
def restore_default_database!
database = YAML::load_file('config/database.yml')[Rails.env]['database']
change_database!(database)
end
end
end
end
模块活动记录
模块连接适配器
类Mysql2Adapterdb)
清除\u查询\u缓存
重新连接!
结束
结束
def restore_默认_数据库!
database=YAML::load_文件('config/database.yml')[Rails.env]['database']
改变你的数据库!(数据库)
结束
结束
结束
结束
我很高兴尝试使用Rails 6方法来处理多个数据库,但很难过地看到,他们只考虑了有限数量的数据库,这些数据库列在databases.yml
文件中
在我的情况下,我可以在应用程序运行时(创建新客户端站点时)创建一个新数据库,然后通过访问与该站点关联的域名连接到该数据库
我上面的代码重用了相同的连接。我尝试使用建立\u连接
,但最终会返回找不到“primary”的连接池。
一旦连接池显示已耗尽。我想我需要一个池,其中至少有我拥有的数据库数量,这样它才不会耗尽,即使这样,如果每个时间段有多个站点连接,它仍然可以
我的直觉是坚持我所拥有的,但我想知道在中途更改数据库时是否还有其他缓存需要清除?(适用于轨道6.0和6.1)
我应该提到的是,每个数据库都是完全相同的结构;这只是在客户之间划分数据的一种方式