2011-11-09 14 views
6

Ben aşağıdaki gibi benim Raylar app kurulum:Raylar üretir: bazı zaman aşımı sonra "PGError sunucusu beklenmedik bağlantıyı kapattı"

  • Raylar: 3.0.5 (Apache vekaleten altında) RHEL üzerinde çalışan 5.6
  • Postgres: 8.4, Windows Server 2008 üzerinde çalışıyor 2 sunucu aynı LAN üzerindedir.

Sorun Raylar uygulamasına yeni bir talepte zaman, bazı boş zaman sonra, bana aşağıdaki hatayı veriyor: Ben araştırdım kadarıyla

ActiveRecord::StatementInvalid (PGError: server closed the connection unexpectedly 
    This probably means the server terminated abnormally 
    before or while processing the request. 

Öyle görülüyor ki, Postgres'in bazı zaman aşımlarından sonra veritabanı bağlantıları düşüyor. Bu süre boyunca,

  • , Raylar taraftan ben Raylar için başka isteği (2 istek) yaparsanız Rails bir istek (1 istek), bu
  • yukarıdaki gibi bağlantı hata görüntüler yaparsanız, Raylar Postgres'e yeniden bağlanıyor ve düzgün çalışıyor gibi görünüyor.

Ben müvekkilime olmayan bir hata yanıtı teslim etmek istediğimizden hep benim durumumda çok ciddi olan yine tüm normal çalışmasını sahip olacak daha sonra ilk bağlantı hatası yaşayacaksınız demektir.

Ben soru ve cevapları aşağıdaki baktım, ama onlar benim durum için uygun görünmüyor:

Uygulamamı db bağlantı hatalarından arındırmak için herhangi bir öneriniz var mı? Teşekkür ederim.

+0

Postaku – Salil

+0

ile postgresql kullanırken aynı hatayı alıyorum Bağlantıların gitmesi normaldir. Rails'in çok nazik davranması normal değildir. Veri tabanı sürücünüzün (bağdaştırıcınızın) "doğrula" ve "etkin" işlevlerinin uygulanıp uygulanmadığını kontrol edin. normalde 'ActiveRecord :: ConnectionAdapters :: ConnectionPool', adaptöre havuzdan çıkmadan önce herhangi bir eski bağlantıyı yeniden bağlama şansı verir. Postgres için hangi gem kullanıyorsunuz? – vladr

cevap

1

database.yml'de, bağlantı için reconnect: true seçenek ayarlandı mı? örn:

production: 
    adapter: postgresql 
    database: myapp 
    username: deploy 
    password: password 
    reconnect: true 

Belirli hata hakkında emin değilim, ama bu seçenek olmadan kendinizi beklenen db hataların bir sınıfını işlemek gerekir.

4

Bu problemin çok fazla olduğu Heroku'daydık. Korsan bir çözüm olarak, yaptığımız şey. Aşağıdakileri ApplicationController'ınıza yerleştirin: Temel olarak, her bir denetleyici isabetindeki bağlantıyı sınayın. Ölçeklenebilir? Pek sayılmaz. Ama sorunu bizim için çözdü.