2011-02-22 13 views
5

Rails modellerinde gözlemciler ve geri bildirimler, aynı iş parçacığında çalışır ve geri gelinceye kadar isteği engeller.Rails gözlemcileri ve geri bildirimleri eşzamansız olarak nasıl ele alınabilir (farklı bir iş parçacığında)?

Örneğin, bir Photo modelim varsa ve after_create geri aramada veya gözlemcisinde yeniden boyutlandırma işi kuyruğum varsa, istek kuyrukta bir giriş yapana kadar bitmez (bazen kullanıyorumsa yavaş olabilir) Kuyruk için Amazon SQS).

Aynı, Rails denetleyicilerinde Geri Arama için de geçerlidir. Önbellek yönetimi veya depo analitiği gibi bakımları çalıştırmam gerekirse, istek geri arama bitene kadar tamamlanmaz.

Farklı bir iş parçacığında bir geri arama (Model veya Denetleyici) veya gözlemci içindeki kodu çalıştırmak için bir Rails yolu var mı, bu nedenle istek duraklatılmıyor mu?

cevap

2

istek/yanıt döngüsü dışında arka planda kod çalıştırmasına popüler yollarından bir çift delayed_job ve resque

delayed_job arka plan işleme işleri sıralamak için veritabanını kullanır anda dolu ve resque REDIS kullanır.

Her ikisini de kullandım ve her ikisi de harika çalışıyorlar, en iyi durumunuza uygun olanı görmek için belgeleri okuyun.

Bu, gözlemcilerinizi ve geri aramalarınızı arka planda otomatik olarak çalıştırmaz, ancak bunu yapmanın daha kolay olmasını sağlar. Bu teknik, Rails topluluğunda çok yaygın ve üretilmiştir.

+0

Teşekkürler, iyi fikir. Delayed_jobs veya resque işlevlerini dış kaynak kullanmak için Amazon SQS kullanıyorum, böylece gecikme kullanırken gecikme veya gecikme ayarlarını kullanırken veritabanına sürekli olarak ping atmam gerekmiyor. Amazon SQS mükemmel bir şekilde çalışıyor ancak bazen SQS sunucusuna yeniden bağlantıda küçük bir gecikme oluyor. – Sid

+0

Ayrıca en hızlı olan [sidekiq] 'ye (https://github.com/mperham/sidekiq) bakın ve ihtiyacınız olduğunda ticari destek sunar. –

İlgili konular