2015-07-23 19 views
6

Uygulamamda, bir dış API isteğinden alınan verileri almak ve kaynakları veritabanına oluşturmak/kaydetmek için sorumlu olan birkaç Builder sınıfına sahibim. Çok miktarda veri ile uğraşıyorum ve bunu birden fazla işlem kullanarak hızlandırmak için Paralel gem'i uyguladık. kod örneği test edilen BuradaRSpec: Paralel (PG :: ConnectionBad hatası) kullanan yöntemler nasıl test edilir

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

edilir:

class AirportBuilder < Resource 
    def build_from_collection 
    Parallel.each(object_producer, in_processes: 24) do |params| 
     instance = Airport.find_or_initialize_by(fsid: params[:fs]) 
     build!(instance, params) 
    end 
    end 
end 

I

Ancak, Paralel kullanan bir yöntem için herhangi bir test, aynı hata ile başarısız olduğunu bulma ediyorum Bunun üzerinde bazı araştırmalar yaptım, ancak Google'daki tüm sonuçların, test paketinin daha hızlı çalışmasını sağlamak için birden fazla iş parçacığı/süreç kullanarak yapmak zorunda kalması farklı bir sorundur.

Bunu PG hatasına neden olmadan nasıl etkin bir şekilde test edebileceğime dair herhangi bir fikir var mı? Bir şeyi koymama gerekebileceğinin farkındayım, ama neyin saplanacağını ve hala anlamlı bir test yaptıklarından emin değilim.

Yardım edebilecek birine şimdiden teşekkür ederiz!

cevap

1

Test veritabanınız için yapılandırılmış olduğundan çok fazla veritabanı bağlantısı kullanıyor musunuz? Belki de betiğinizin ihtiyaçlarına eşit bir havuz boyutuna ayarlamayı deneyin (24'e benziyor)?

test: adapter: whatever host: whatever username: whatever password: whatever database: whatever pool: 24

Başlar yukarı da the default ActiveRecord connection pool bazı matematik yapmak istediğini biliyoruz. this Heroku dev center article'da bazı iyi bilgiler.

İlgili konular