2009-05-19 19 views
5

Sana geliştirme/üretim günlüğüne şey görebilirsiniz, raylar içinde 2.3.2 ActiveRecord sorgular önbelleğe olduğunu yani biliyorum: Aynı ilkeler görevleri komisyon için geçerli olmadığını merak ediyorumActiveRecord modelleri komisyon görevleri için önbelleğe alınmış mı?

CACHE (0.0ms) SELECT * FROM `users` WHERE `users`.`id` = 1 

.

Çok sayıda farklı modeli sorgulayacağım bir komisyon görevim var ve kendi önbelleğimi uygulamam mı, yoksa bu davranış varsayılan olarak eklenmiş mi diye bilmek istiyorum.

Ayrıca, komisyon görevi sırasında gerçekleştirilen sql sorgularını görmenin bir yolu var mı? Geliştirme/üretim günlüğüne benzer

cevap

1

Bir sorgu görevi belirttiğiniz ortamda çalışır, bu durumda bu ortamın kurallarını benimseyecektir.

RAILS_ENV=test 

Günlüğü tırmık parçası olarak ayarlanabilir ve normal raylar oturum içinde bunu görmelisin:

komut satırından raylar env ayarlayabilirsiniz.

2

ActiveRecord Sorgu Önbelleği hakkında konuşuyorsunuz. Rake-Görevleri'nde de çalışmanız gerekir; bunları önbelleğe alma etkinleştirilmiş bir ortamda çalıştırıyor olmanız koşuluyla, ör. production. Örnekler için bkz. Rails Guide on Caching.

Olabilir veya dava için önbelleğe alma hakkı tür olmayabilir

:

u1=User.find 1 # loads user1 first time from DB 
u2=User.find 2 # loads user2 first time from DB 
u1again = User.find 1 # loads user1 from cache 
all = User.all # loads user1 and user2 from DB again 
+0

'u kullanarak kodunuzun bazı bölümleri için önbelleğe almayı seçerek devre dışı bırakabilirsiniz. Bunun yalnızca denetleyicilerde doğru olabileceğini düşünüyorum. Burada metin var: "Sorgu önbelleklerinin bir eylemin başlangıcında oluşturulduğunu ve bu eylemin sonunda yok edildiğini ve bu nedenle yalnızca eylemin süresi boyunca devam ettiğini belirtmek önemlidir." Ortam günlüğüne bakmanız gerekir (ör. Yukarıdaki yanıtı alırsanız log/test.log) ve tekrarlanan SQL sorgularını göreceksiniz. – chug2k

1

SQL önbellek tırmık görevler için varsayılan başına etkin değildir. Böyle, bir önbellek bloğunda kodunuzu sarabilirsiniz: Bu Raylar denetleyicisi eylemler için ne yaptığını esasen

task :foobar => :environment do 
    ActiveRecord::Base.connection.cache do 
    User.find 1 # Will hit the db 
    User.find 1 # Will hit the cache 
    end 
end 

olduğunu. Önbelleğin belleği kullanacağını ve sorgulama görevlerinin büyük veri kümeleriyle çalışma eğilimi olduğunu unutmayın, bu da size sorun verebilir. uncached

İlgili konular