【发布时间】:2015-05-10 21:37:58
【问题描述】:
我在跨我的应用程序(机架应用程序)使用的数据库类中使用了 sequel gem,它只实例化一次。
DB类初始化sequel一次,有一些我调用的方法,主要是只读的:
def initialize
@psql ||= Sequel.connect('postgres://localhost/mydb')
end
def query_example
@psql[:users].order(:time)
end
该应用程序基本上是一个 API。比如:
class API < Grape::API
format :json
before do
@db = Db.new
end
get '/' do
@db.query_example
end
这一直有效,直到我在 postgreSQL 中达到 100 个连接。我假设续集正在使用某种连接池,但不知何故没有释放连接?我可以在 pg_stat_activity 表中看到状态为“空闲”的 100 个“选择”。但是,每个新请求都会失败并出现以下错误:
Sequel::DatabaseConnectionError: PG::ConnectionBad: FATAL: 抱歉,已经有太多客户了
/Users/lopezj2/.rvm/gems/ruby-2.1.2/gems/sequel-4.22.0/lib/sequel/adapters/postgres.rb:236:in `initialize'
/Users/lopezj2/.rvm/gems/ruby-2.1.2/gems/sequel-4.22.0/lib/sequel/adapters/postgres.rb:236:in `new'
/Users/lopezj2/.rvm/gems/ruby-2.1.2/gems/sequel-4.22.0/lib/sequel/adapters/postgres.rb:236:in `connect'
/Users/lopezj2/.rvm/gems/ruby-2.1.2/gems/sequel-4.22.0/lib/sequel/connection_pool.rb:101:in `make_new'
看起来 Sequel 正在尝试在池中创建新连接,但是,该应用程序并不是特别健谈。
【问题讨论】:
标签: ruby postgresql sequel grape-api