如何用Ruby on Rails创建一个新的ActiveRecord连接池



我有一个RoR应用程序,它与主RoR数据库一起工作得很好。我还希望以一种不需要为每个新的HTTP请求重新创建数据库连接的方式连接到任意数据库。从我的研究来看,连接池似乎是可行的方法。

然而,我有麻烦弄清楚如何创建池本身:

config = ActiveRecord::ConnectionAdapters::ConnectionSpecification.new( {
          "adapter"  => "postgresql",
          "host"     => "localhost",
          "port"     => 9000,
          "database" => "foo_test",
          "username" => "foo",
          "password" => "bar",
          "pool"     => "5",
          "timeout"  => "3000"
        })
my_connection_pool = ActiveRecord::ConnectionAdapters::ConnectionPool.new(config)

此错误与NameError:未初始化常量ActiveRecord::ConnectionAdapters::ConnectionSpecification。有趣的是ActiveRecord::ConnectionAdapters::ConnectionPool工作正常(但没有正确的配置对象)。

我在这里做什么?

还有,这些是用来解决我的问题的正确的东西吗?

根据您的用例,Rails可能会自动为您完成此操作。每个ActiveRecord::Base子类查找继承链以查找其池,因此

class Foo < ActiveRecord::Base
end

使用ActiveRecord::Base连接池,但是

class Bar < ActiveRecord::Base
  establish_connection database: 'some_other_db'
end
class BarSub < Bar
end

将同时使用Bar池连接到'some_other_db'。

我不记得了,但我认为每次你使用ActiveRecord::Base.establish_connection(或establish_connection上的任何子类)它创建一个新的池。否则将是荒谬的!

一个可能对建立连接有帮助的SO帖子

我只是在我的初始化器中有一个单独的文件,我用来创建多个连接。lib文件是:

require 'active_record'
module whateverName
  def self.included(klass)
    klass.extend(ClassMethods)
  end
  module ClassMethods
    def base(dbName)
      establish_connection(ActiveRecord::Base.configurations[dbName.to_s][Rails.env])
    end
  end
end

将该文件保存在lib和models中,只需包含此文件并传递数据库类型。确保数据库。Yml具有所需的配置。模型将类似于:

class Bar < ActiveRecord::Base
  include whateverName
  base :oracle
end
在database.yml中配置oracle。

相关内容

  • 没有找到相关文章

最新更新