Ruby on Rails和Heroku-“角色的连接过多”

时间:2018-08-06 22:15:51

标签: ruby-on-rails postgresql heroku

我在Heroku的业余爱好基础计划上运行Rails应用程序,由于某种原因,每当我尝试连接到生产数据库时,我总是收到臭名昭著的“角色连接过多”错误。这意味着自动备份将继续失败,并且耙任务将由于拒绝连接而无法运行。

每次我运行heroku pg:info时都会显示20/20连接。如果我运行heroku pg:killall,则会终止所有连接,并显示0/20,直到我重新启动所有测功机,然后立即恢复为20/20。

我设法通过终止所有连接并重新启动服务器以触发连接泄漏来运行heroku pg:psql。运行SELECT * FROM pg_stat_activity会显示许多空闲的“ SELECT 1”查询,但不会显示它们来自何处。这是典型的行,仅限于application_name,client_addr,waiting,state和query:

bin/rails | 10.14.19.163 | f | idle | SELECT 1

现在想象一下,x20彼此之间开始的毫秒数。暂存应用程序未显示这些症状,并且始终保持在1/20左右的连接数。

这一切都是在从阶段到生产的相当大但普通的部署之后开始的(基本上只是添加一些新的视图,模型,控制器,预编译的资产等)。

任何帮助调试此混乱情况的人将不胜感激。

编辑:

database.yml

default: &default adapter: postgresql encoding: unicode pool: 5 production: <<: *default url: <%= ENV['DATABASE_URL'] %>

heroku ps说:

=== web (Hobby): bin/rails server -p $PORT -e $RAILS_ENV (1) web.1: up 2018/08/11 23:10:04 +0200 (~ 13h ago)

1 个答案:

答案 0 :(得分:0)

这可能是由几件事引起的。其中之一可能是,如果您使用的是Puma之类的并发Web服务器,则在生产环境中部署时可能会获得那么多连接。

一种调试方法是在生产模式下启动应用程序:

rails server -e production

然后在您的数据库中检查连接数

select * from pg_stat_activity

然后检查哪个进程正在建立连接。如果问题仍然存在,请考虑使用连接池PgBouncer