Я запускаю приложение rails на базовом плане Heroku для хобби, и по какой-то причине я продолжаю получать печально известную ошибку «Слишком много соединений для роли» всякий раз, когда я пытаюсь подключиться к производственной базе данных. Это означает, что автоматические резервные копии продолжают давать сбои, а задачи rake не будут выполняться, потому что им отказано в подключении.
Каждый раз, когда я запускаю heroku pg:info, он говорит 20/20 подключений. Если я запускаю heroku pg:killall, то все соединения уничтожаются, и он говорит 0/20, пока я не перезапущу все динамометры, и он сразу же вернется к 20/20.
Мне удалось запустить heroku pg:psql, уничтожив все соединения и перезапустив сервер, чтобы вызвать утечку соединения. Запуск SELECT * FROM pg_stat_activity показывает множество бездействующих запросов "SELECT 1", но не указывает, откуда они берутся. Вот типичная строка, ограниченная именем приложения, адресом_клиента, ожиданием, состоянием и запросом:
bin/rails | 10.14.19.163 | f | idle | SELECT 1
А теперь представьте, что x20, все началось миллисекунды между собой. Промежуточное приложение не проявляет этих симптомов и постоянно находится на уровне около 1/20 подключений.
Все это началось после довольно большого, но обычного развертывания от промежуточной до рабочей среды (по сути, просто добавление некоторых новых представлений, моделей, контроллеров, предварительно скомпилированных ресурсов и т. д.).
Любая помощь в отладке этого беспорядка будет принята с благодарностью.
РЕДАКТИРОВАТЬ:
база данных.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)
database.ymlи что вы видите, когда запускаетеheroku ps? - person Adam McCrea   schedule 12.08.2018heroku psпоказывает, что вы используете один веб-дино и больше ничего.database.ymlпоказывает пул соединений из 5. Все это означает, что я ожидаю увидеть МАКС. 5 подключений к Postgres, если только вы не настроили Puma для запуска нескольких рабочих (в чем я сомневаюсь, что вы это сделали). Мое единственное другое подозрение (хотя и маловероятное) - это другое приложение, подключающееся к той же БД.heroku pg:credentials:rotateстоит попробовать. - person Adam McCrea   schedule 12.08.2018SELECT 1запросы? Что чертовски странно, посколькуSELECT 1— это просто пинг. - person Jonathan Skogeby   schedule 12.08.2018SELECT application_name from pg_stat_activity WHERE datname IS NOT NULL ORDER BY application_name. Это укажет, откуда берутсяSELECT 1. - person Adam McCrea   schedule 12.08.2018bin/rails. - person Jonathan Skogeby   schedule 12.08.2018