我的网络应用程序位于www.inflationtrends.com。
那里有几个计算器。第一个和第三个访问由 Heroku 托管的 PostgreSQL 数据库。该应用程序本身是使用 Sinatra 制作的。该应用程序使用 Ruby gem Sequel 访问 PSQL 数据库。
在我的“sinatra.rb”文件中,我使用以下代码连接到 PSQL 数据库:
before do
db_name = "DATABASE NAME HERE"
user = "DATABASE USER HERE"
password = "DATABASE PASSWORD HERE"
host = "DATABASE HOST NAME HERE"
port = 5432
sslmode = 'require'
DB = Sequel.postgres(
db_name,
:user=>user,
:password=>password,
:host=>host,
:port=>port,
:sslmode=>sslmode
)
end
而且我还有一个“执行后”块,在页面加载时会断开与数据库的连接
after do
DB.disconnect
end
尽管有“DB.disconnect”代码,但我注意到当多台机器使用该应用程序时仍然有打开的连接。我注意到,当我运行以下代码时,当多个客户端访问应用程序时,“numbackends”(后端连接?)的数量会增加:
DB[
"SELECT *
FROM
pg_stat_database
WHERE
datname = "DATABASE NAME HERE;"
].each{|r| p r}
不过,我应该提一下,我在“sinatra.rb”文件中有如下代码:
get '/' do
@variable = DB[
"SQL CODE HERE"
]
erb :index
end
该代码在第三个计算器中获取“杂货清单”的项目。我不知道这是否会导致连接徘徊。我尝试在“erb :index”行之后添加“DB.disconnect”行,但这似乎并没有影响打开的连接数。
此外,在“index.erb”文件中调用了@variable,但我认为“after”循环中的“DB.disconnect”语句会处理它。我什至尝试将“DB.disconnect”添加到“index.erb”文件的末尾,但这似乎没有任何作用。
所以,我的问题是:即使有这些预防措施,为什么打开的连接数量还在继续增加?如何修复它以便在计算完成后关闭连接?
最后我要注意的是,我使用的 Heroku 提供的 PSQL 数据库一次最多支持 20 个打开的连接。
如果我需要提供更多信息/代码,请告诉我。