R.Reddington

WFN Üye
Konular
562
Mesajlar
562
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
Rails’te uygulama önbelleğini geliştirme ortamında etkinleştirmek için uygulamanızın kök dizininde bin/rails dev:cache komutunu çalıştırın. Bu komut geliştirme önbelleğini açar veya kapatır; açıldığında Rails, önbelleğe alınabilir yanıt ve görünüm parçalarını kullanır. Üretim ortamında ise önbellekleme ayarını çalıştırdığınız ortama göre config/environments/production.rb veya ilgili ortam yapılandırmasında açıkça tanımlamanız gerekir.

Geliştirme ortamında önbelleği açma​


Uygulama dizinine geçtikten sonra şu komutu çalıştırın:

Bash:
bin/rails dev:cache

Komutun çıktısında geliştirme önbelleğinin etkinleştirildiğini belirten bir mesaj görürsünüz. Rails, bu işlem sırasında geliştirme ortamı için kullandığı önbellekleme durumunu ve genellikle tmp/caching-dev.txt dosyasını günceller. Dosyanın varlığı tek başına uygulamanızdaki bütün önbellek işlemlerinin başarıyla çalıştığını kanıtlamaz; asıl kontrol, önbelleğe alınan verinin ikinci istekte yeniden üretilip üretilmediğidir.

Bu komut yerine geliştirme ayar dosyanızda önbellekleme özelliğini elle de açabilirsiniz. config/environments/development.rb içinde aşağıdaki ayarın bulunduğundan emin olun:

Ruby:
config.action_controller.perform_caching = true

Elle değişiklik yaptıysanız Rails sunucusunu durdurup yeniden başlatın. Aksi hâlde çalışan süreç eski yapılandırmayı kullanmaya devam edebilir. Kapatmak için aynı komutu yeniden çalıştırabilir veya ayarı false yapabilirsiniz:

Ruby:
config.action_controller.perform_caching = false

Önbellek deposunu seçme​


perform_caching ayarı, Rails’in önbellekleme özelliklerini kullanmasına izin verir; önbelleğe alınan verinin nerede tutulacağını ise config.cache_store belirler. Küçük bir geliştirme uygulamasında bellek tabanlı depo yeterli olabilir:

Ruby:
config.cache_store = :memory_store

Bu depo işlemi çalıştıran süreç içinde tutulur. Uygulama yeniden başlatıldığında veya birden fazla uygulama süreci kullanıldığında önbellek paylaşılmaz. Bu nedenle üretimde birden fazla sunucu ya da işlem varsa yalnızca bellek tabanlı depoya güvenmek yerine ortak bir önbellek deposu seçmeniz gerekir.

Üretimde kullanılacak depo, Rails sürümünüze ve altyapınıza göre yapılandırılmalıdır. Örneğin Redis kullanıyorsanız bağlantı bilgilerini doğrudan kaynak koda yazmak yerine ortam değişkeninden alın:

Ruby:
config.cache_store = :redis_cache_store, {
  url: ENV.fetch("REDIS_URL")
}

Bu örnekte REDIS_URL tanımlı değilse uygulama başlatılırken hata oluşur. Bu davranış, eksik yapılandırmayı sessizce yok saymak yerine erken fark etmenizi sağlar. Redis’in erişilebilir olması da tek başına yeterli değildir; Rails uygulamasının kullandığı istemci geminin ve bağlantı ayarlarının projenizde doğru kurulmuş olması gerekir.

Aşağıdaki ayrım, hangi ayarın neyi etkilediğini gösterir:
Ayar veya komutEtkisiSınırı
bin/rails dev:cacheGeliştirme ortamında Rails önbelleklemesini açar veya kapatır.Üretim ortamının yapılandırmasını değiştirmez.
config.action_controller.perform_caching = trueDenetleyici ve görünüm önbellekleme özelliklerini etkinleştirir.Verinin hangi depoda tutulacağını tek başına belirlemez.
config.cache_storeÖnbellek verisinin kullanılacağı depoyu belirler.Depo bağlantısının ve gerekli gemilerin ayrıca çalışır olması gerekir.

Önbelleklemenin gerçekten çalıştığını doğrulama​


Önbelleği açtıktan sonra yalnızca sunucunun hatasız başlamasını başarı ölçütü kabul etmeyin. Bir değeri Rails.cache ile yazıp okuyarak seçtiğiniz önbellek deposunu doğrudan test edebilirsiniz. Uygulama dizininde şu komutu çalıştırın:

Bash:
bin/rails runner 'Rails.cache.write("cache_test", "ok", expires_in: 5.minutes); puts Rails.cache.read("cache_test")'

Çıktı ok ise Rails aynı işlem içinde değeri önbellek deposuna yazıp okuyabilmiştir. Bu kontrol, depo bağlantısının temel olarak çalıştığını gösterir; uygulamanızdaki her görünüm parçasının otomatik olarak önbelleğe alındığını göstermez.

Örneğin görünüm parçası önbelleklemesi kullanıyorsanız ilgili görünümde cache bloğu bulunmalıdır:

Kod:
<% cache ["product", @product] do %>
  <%= render @product %>
<% end %>

Ürün değiştiğinde anahtarın ürün bilgisiyle birlikte değişmesi, eski HTML parçasının süresiz kullanılmasını önlemeye yardımcı olur. Ancak önbellekleme; kullanıcıya özel içerik, yetki durumu veya sık değişen veriler için dikkatli tasarlanmalıdır. Kullanıcıya özel bir sonucu ortak bir anahtarla önbelleğe alırsanız bir kullanıcının içeriği başka bir kullanıcıya gösterilebilir.

Komut çalışıyor ama sonuç değişmiyorsa​


Önbelleği açmanıza rağmen her istekte veri yeniden hesaplanıyorsa şu ayrımları kontrol edin:
  • İsteği gerçekten aynı Rails ortamına gönderdiğinizden emin olun. Geliştirmede açılan önbellek, RAILS_ENV=production ile çalışan süreci etkilemez.
  • config.action_controller.perform_caching değerinin çalışan ortam yapılandırmasında true olduğunu kontrol edin.
  • Kodun Rails.cache yerine yalnızca bir Ruby değişkeni veya istek süresi boyunca yaşayan başka bir nesne kullanmadığını doğrulayın.
  • Önbellek anahtarının her istekte değişmediğini kontrol edin. Zaman damgası, rastgele değer veya değişen sorgu parametresi anahtara ekleniyorsa her istek yeni bir kayıt gibi davranabilir.
  • Önbellek deposunun birden fazla işlem veya sunucu arasında paylaşılması gerekiyorsa :memory_store kullanımının uygun olmadığını değerlendirin.
Bir test değeri okunamıyorsa hata mesajını, kullanılan Rails ortamını, config.cache_store tanımını ve ilgili önbellek hizmetinin erişilebilirlik durumunu birlikte inceleyin. Üretime geçmeden önce test anahtarını silin veya kısa bir süre sonu belirleyin; gerçek uygulama verilerini deneme anahtarlarıyla karıştırmayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic