And*_*Gis 4 ruby database sinatra
我在Sinatra中创建了一个小聊天应用程序,在heroku上创建了jQuery.它只是在用户提交时将消息插入数据库.并且还每2秒下载一次新消息.经过几分钟的测试后,它停止工作,我收到了一封heroku的电子邮件:
嗨,
我们注意到gisekchat应用程序有大量连接打开共享数据库.由于性能原因,我们必须限制共享数据库的连接数.您是否可以减少共享数据库的总连接数或移动到专用数据库?
您似乎没有利用连接池,并且正在为应用程序中的每个请求打开与数据库的新连接.
谢谢,-Chris
这是支持提交消息的动作(接收非常相似):
post '/send' do
con = con = PGconn.connect($dbhost, 5432, "","",$dbname, $dbuser, $dbpass)
con.exec("insert into messages(usr, msg, date) values('#{params[:usr]}','#{params[:msg]}', now())")
end
Run Code Online (Sandbox Code Playgroud)
我该如何更改它以启用连接池?
是的,这是真的,每次发送'发送'后,你真的打开一个新的数据库连接.
所以你需要改变它.一种可能性是,在全球范围内打开连接:
$con = PGconn.connect($dbhost, 5432, "","",$dbname, $dbuser, $dbpass)
Run Code Online (Sandbox Code Playgroud)
这应该在初始化$ dbname ...变量之后但在使用任何路由之前完成.
但是,如果您使用的是模块化的sinatra版本,而不是经典版本,则可以使用声明实例变量
attr_accessor :con
Run Code Online (Sandbox Code Playgroud)
并在应用程序启动之前初始化它.