簡體   English   中英

Ruby on Rails和Heroku-“角色的聯系過多”

[英]Ruby on Rails & Heroku - “Too many connections for role”

我在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)

這可能是由幾件事引起的。 其中之一可能是,如果您使用的是諸如Puma之類的並發Web服務器,那么在生產環境中部署它可能會獲得那么多連接。

一種調試方法是在生產模式下啟動應用程序:

rails server -e production

並在數據庫中檢查連接數

select * from pg_stat_activity

並檢查哪個進程正在建立連接。 如果問題仍然存在,請考慮使用連接池PgBouncer

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM