在开发中禁用Sprockets资产缓存

Old*_*Pro 16 ruby rack ruby-on-rails sprockets asset-pipeline

我正在使用Rails 3.2.13和Rails Asset Pipeline.我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并让Pipeline自动编译它们,所以我不能在开发中关闭管道.我不是在开发中预编译资产,甚至没有public/assets/目录.

但是,当我对包含文件进行更改时,例如对_partial.html.erb文件中包含(呈现)的layout.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
Run Code Online (Sandbox Code Playgroud)

尽管如此,即使这样,文件也会显示在下面tmp/cache/assets/,tmp/cache/sass/并且未来的请求也无法进行更改.现在我每次想要看到更改时都必须手动删除这些目录.

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

Sprockets使用默认的Rails缓存存储来缓存开发和生产中的资产.

TODO:添加有关更改默认商店的更多信息.

那么,我如何让Sprockets按需编译资产但不缓存结果呢?

Old*_*Pro 29

这是神奇的咒语:

config.assets.cache_store = :null_store  # Disables the Asset cache
config.sass.cache = false  # Disable the SASS compiler cache
Run Code Online (Sandbox Code Playgroud)

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

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

  • @OldPro好一点 - 我盘算大多数人会在这里结束,由于谷歌,但可能还有那么我所做的:http://stackoverflow.com/questions/22979839/disable-sprockets-asset-caching-in-development-上轨-4 (4认同)
  • @Cymen,缓存在Rails中的工作方式不同4.发布一个新问题,如果你想获得帮助. (2认同)