如何使用Ruby on Rails创建新的ActiveRecord连接池?

Som*_*Guy 6 ruby database activerecord ruby-on-rails ruby-on-rails-3

我有一个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)
Run Code Online (Sandbox Code Playgroud)

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

我该怎么办?

而且,这些是用来解决我的问题的正确方法吗?

Woa*_*dae 3

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

class Foo < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

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

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

class BarSub < Bar
end
Run Code Online (Sandbox Code Playgroud)

都会使用Bar池连接到“some_other_db”。

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

关于建立连接的可能有用的 SO 帖子