Czy oba polecenia są równoważne? Jeśli nie, jaka jest różnica?Jaka jest różnica między Rails.cache.clear a rake tmp: cache: clear?
Odpowiedz
Zadanie rake usuwa tylko pliki przechowywane w systemie plików w "#{Rails.root}/tmp/cache"
. Oto kod dla tego zadania.
namespace :cache do
# desc "Clears all files and directories in tmp/cache"
task :clear do
FileUtils.rm_rf(Dir['tmp/cache/[^.]*'])
end
end
Rails.cache.clear
będzie robić różne rzeczy w zależności od ustawień aplikacji dla config.cache_store
. http://guides.rubyonrails.org/caching_with_rails.html#cache-stores
Jeśli używasz config.cache_store = :file_store
, wtedy Rails.cache.clear
będzie funkcjonalnie identyczne z rake tmp:cache:clear
. Jeśli jednak używasz innego modelu cache_store
, np. :memory_store
lub :mem_cache_store
, tylko wyczyszczenie pamięci podręcznej aplikacji zostanie wyczyszczone tylko przez Rails.cache.clear
. W takim przypadku rake tmp:cache:clear
będzie po prostu próbował usunąć pliki z "#{Rails.root}/tmp/cache"
, ale prawdopodobnie nic nie zrobi, ponieważ prawdopodobnie nic nie jest buforowane w systemie plików.
Kiedy zmieniliśmy magazyn pamięci podręcznej na: mem_cache_store, zauważyłem, że Rails.cache.clear również rozpoczął czyszczenie wszystkich sesji użytkownika, wylogowując wszystkich użytkowników. Czy to zamierzone zachowanie? Czy istnieje sposób na wyczyszczenie pamięci podręcznej bez dotykania sesji? (Aktualizujemy z Rails 3 do Rails 4) – sandre89