Rails.cache.clear和rake tmp:cache:clear有什么区别?

时间:2013-09-26 01:43:55

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rake

这两个命令是否相同?如果没有,有什么区别?

1 个答案:

答案 0 :(得分:74)

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"中删除文件,但实际上可能不会执行任何操作,因为文件系统上可能没有任何缓存。