2016-03-31 19 views
0

Bir raylar 4 app var ve önbelleğe almaya çalışıyor. Yeni kullanıcının oluşturulup oluşturulmadığını kontrol etmek için @profiles_sidebar.first önbellek anahtarını kullanıyorum. Bunun bir sorun olup olmadığından emin değilim, çünkü hala bir db sorgusu var. Önbelleğe alma gereksinimlerinin süresinin dolup dolmadığını kontrol etmek için tercih edilen mekanizma bu mu? İyi yapıyor muyum?rayları sorgu önbelleğe alındıktan sonra hala çalışır

<% cache(@profiles_sidebar.first) do %> 
    <% @profiles_sidebar.each do |profile| %> 
    <%= link_to user_path(profile.user) do %>    
     <%= truncate(profile.full_name, length: 25) %> 
     <%= truncate(profile.company, length:25) %> 
    <% end %> 
    <% end %> 
<% end %> 

konsol kod önbelleği okuma: Eğer özeti oluşturulduktan sonra rekor güncellendi olmadığını bilmek gerekir beri etrafında en az bir veritabanı sorgu almanın bir yolu yoktur

13:31:53 puma.1 | Profile Load (2.2ms) SELECT "profiles".* FROM "profiles" ORDER BY "profiles"."created_at" DESC LIMIT 1 
13:31:53 puma.1 | User Load (2.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IN (67) 
13:31:53 puma.1 | Cache digest for app/views/users/_user_sidebar.html.erb: bfc9447057c94bcfe13c18e391127f2d 
13:31:53 puma.1 | Read fragment views/profiles/62-20160331112332689423000/bfc9447057c94bcfe13c18e391127f2d (0.2ms) 
13:31:53 puma.1 | Rendered users/_user_sidebar.html.erb (11.8ms) 

cevap

1

.

@profiles_sidebar = Profile.order(created_at: :desc) 
          .limit(10) 
          .load 

tek bir kayıt getiriliyor ve 10 arasındaki gerçek fark olsa marjinal olabilir:

Bunu tek DB sorgusu beri "soğuk" cache üzerinde biraz daha iyi olurdu peşin @profiles_sidebar kenar çubuğu yükleyebilir.

Ayrıca, bir sorguda Kullanıcı ve Profil hem getirmesi eager loading or includes kullanmak isteyebilirsiniz:

@profiles_sidebar = Profile.includes(:user) 
          .order(created_at: :desc) 
          .limit(10) 
          .load 
+0

max sizin development.rb içinde bu çizgiyi olduğundan emin olun sayesinde (varsayılan olarak dev env için devre dışı). Bazı şeylerden hala emin olmadığımdan bir soru daha oluşturacağım. –

+0

Önbellek anahtarlarının adlandırılmasıyla ilgili yenisi şu şekildedir: http://stackoverflow.com/questions/36336322/rails4-caching-naming-conventions –

0

Sana emin raylar önbelleği etkinleştiren yapmak, sen geliştirme ortamında varsayalım ?? Yine,

config.action_controller.perform_caching = true 
+0

Etkinleştirildi. –