我的網站上運行Rails應用程序和resque工人在生產模式下運行,在Ubuntu 9.10,Rails的2.3.4,紅寶石EE 2010.01和PostgreSQL 8.4.2Rails的Resque工失敗,PGError:服務器關閉了連接意外
工人不斷提出錯誤:PGError:服務器意外關閉了連接。
我最好的猜測是,主要resque過程建立連接到數據庫(例如authlogic這樣做,當使用User.acts_as_authentic),同時加載rails應用程序類,並且該連接在fork()ed進程損壞(退出?) ,所以下一個分叉的孩子得到了一種破碎的全局ActiveRecord :: Base.connection
我可以重現非常類似的行爲,這個sample code模仿fork /處理resque worker。 (AFAIK,libpq的用戶建議重新創建分叉過程中的連接,否則它不安全)
但奇怪的是,當我使用pgbouncer或pgpool-II而不是直接pgsql連接時,不會出現此類錯誤。
因此,問題是我應該在哪裏以及如何挖掘以找出爲什麼它斷開連接並且正在使用連接池?還是合理的解決方法?
謝謝,所以我簡單地加入了hook:Resque.after_fork = Proc.new {ActiveRecord :: Base。establish_connection} – 2010-04-10 10:10:48
我可能會遇到類似的問題。你能告訴我你是如何以及在哪裏添加「鉤子」的? – 2011-03-23 12:04:38
底部鏈接被破壞 – botbot 2013-07-30 01:06:34