Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中切换数据库而不耗尽连接池的更好方法_Ruby On Rails_Database_Multi Tenant_Ruby On Rails 6 - Fatal编程技术网

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)

我应该提到的是,每个数据库都是完全相同的结构;这只是在客户之间划分数据的一种方式