2012-03-19 68 views
1

我在config/initializers中为HAML添加了一个自定义引擎。如何防止资产在开发模式下被Rails资产管道缓存?

当我访问http://127.0.0.1:3000/assets/page.html它成功呈现页面。

# page.html.haml 

!!! 5 
%html{:lang => "en"} 
    %head 
    = stylesheet_link_tag 'application' 
    = javascript_include_tag 'application' 

问题是Rails似乎缓存了html资源。当我从application.js清单中添加或删除文件时,它不更新,直到我停止Rails服务器并运行rake tmp:clear。另一种方法是触摸application.js文件。我设置了config.assets.debug = true,因为我更喜欢在Chrome DevTools中查看单个文件/文件夹,而不是一个大的application.js文件。

有没有办法在开发过程中排除某些资产被缓存?

只是重申 - 它的HTML被缓存,这是问题,访问http://127.0.0.1:3000/assets/application.js时反映清单的更改。

回答

2

蛮力解决方案是一些depends_on属性添加到HAML文件:

# page.html.haml 
#= depend_on application.js 
#= depend_on application.css 
!!! 5 
%html{:lang => "en"} 
    %head 
    = stylesheet_link_tag 'application' 
    = javascript_include_tag 'application' 

这应该迫使资产进行再生时application.js文件被改变。

有几个这样的警告。文件名应该是源码树中的名称。它假设你可以在你的HAML渲染器中使用#作为评论(我不知道HAML,所以我不确定)。我也不确定这是如何与定制引擎一起工作的。此外,更好的解决方案是让您的自定义HAML引擎本身跟踪依赖关系,但我不知道如何执行此操作。

查看sprockets docs了解更多详情

+0

辉煌!我实际上之前尝试过,因为我使用了'// depend_on',所以它不起作用。我刚刚意识到HAML注释语法是' - #'和' - #depends_on application.js'很好。 – vaughan 2012-03-19 06:27:02