ruby-on-rails – 在开发中禁用Sprockets资产缓存

我使用的是Rails 3.2.13和Rails Asset Pipeline.我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并且管道自动编译它们,所以我无法关闭开发中的管道.我没有预先编译资产,甚至没有公共/资产/目录.

但是,当我对包含的文件进行更改时,例如在layout.html.erb文件中包含(呈现)的_partial.html.erb文件,而不更改执行包含本身的文件(在此示例中为layout). html.erb),Sprockets不会检测到更改并使缓存无效,所以我不断得到相同的陈旧文件.当我在积极的开发中这样做时,我想禁用资产的任何缓存,以便我可以在每个请求上获得更改,但我无法弄清楚如何做到这一点.我已经在我的development.rb中设置了以下所有内容

config.action_controller.perform_caching = false
config.action_dispatch.rack_cache =  nil
config.middleware.delete Rack::Cache
config.assets.debug = true
config.assets.compress = false
config.cache_classes = false

尽管如此,即使这样,文件显示在tmp / cache / assets /和tmp / cache / sass /下,更改在将来的请求中不可用.现在我必须手动删除这些目录,每次我想看到一个变化.

不幸的是,资产管道RoR指南How Caching Works部分的全部内容是:

Sprockets uses the default Rails cache store to cache assets in
development and production.

Todo: Add more about changing the default store.

那么,如何才能使Sprockets根据需要编译资源,但不缓存结果?

解决方法

这是魔法咒语:
config.assets.cache_store = :null_store  # disables the Asset cache
config.sass.cache = false  # disable the SASS compiler cache

资产管道具有自己的缓存实例,并设置config.assets.cache = false不执行任何操作,因此您必须将其缓存设置为null_store以禁用它.

即使如此,SASS编译器也有它自己的缓存,如果你需要禁用它,你必须单独禁用它.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...