2013-09-26 133 views

回答

67

rake任務只清除存儲在"#{Rails.root}/tmp/cache"文件系統中的文件。這是該任務的代碼。

namespace :cache do 
    # desc "Clears all files and directories in tmp/cache" 
    task :clear do 
    FileUtils.rm_rf(Dir['tmp/cache/[^.]*']) 
    end 
end 

https://github.com/rails/rails/blob/ef5d85709d346e55827e88f53430a2cbe1e5fb9e/railties/lib/rails/tasks/tmp.rake#L25-L30

Rails.cache.clear將根據您的應用程序設置config.cache_store做不同的事情。 http://guides.rubyonrails.org/caching_with_rails.html#cache-stores

如果您使用的是config.cache_store = :file_store,那麼Rails.cache.clear在功能上與rake tmp:cache:clear相同。但是,如果您使用其他cache_store,如:memory_store:mem_cache_store,則只有Rails.cache.clear會清除您的應用高速緩存。在這種情況下,rake tmp:cache:clear只會嘗試從"#{Rails.root}/tmp/cache"中刪除文件,但可能實際上不會執行任何操作,因爲文件系統中可能沒有緩存任何內容。

+0

當我們將緩存存儲更改爲:mem_cache_store時,我注意到Rails.cache.clear也開始清除所有用戶會話,並註銷所有用戶。這是預期的行爲?有什麼辦法可以在不碰觸會話的情況下清除緩存? (我們正在從Rails 3升級到Rails 4) – sandre89