我有一个没有使用资产管道的 Rails 应用程序。这些资产由 Yeoman ( http://yeoman.io/ ) 和 Grunt 任务管理。我们最近引入了一个浏览器缓存破坏任务,称为grunt-rev
在部署之前修改资产。此任务以某种唯一性重新命名资产,然后流程传递到另一个名为的任务grunt-usemin
,该任务使用新资产名称更新 html 和 css 文件,然后将它们复制到公共文件夹。
例如,main.css
看起来index.html
像:
<link rel="stylesheet" href="styles/main.css">
并将被重新写入:
<link rel="stylesheet" href="styles/f43ce6bf.main.css">
Rails 应用程序在本地开发中运行良好,因为资产是由 Yeoman 动态生成的。但是一旦部署,资产公用文件夹包含所有已更新的资产,Rails 视图(用 haml 编写)找不到它们。像下面这样的链接现在已经死了......
%link{:href => "/styles/main.css", :media => "screen,print", :rel => "stylesheet"}
所以我想出了一些我认为可行的想法。
- 符号链接
main.css
->f43ce6bf.main.css
- 添加视图助手以查找资产
- 将 javascript 和 css 内联到视图中,因为它不是太大
- fork grunt-usemin 添加 haml 支持,然后针对 Rails 中的视图运行它
但不确定什么是最好的?还是我错过了一个更简单的解决方案?
更新:我现在正在使用下面的助手
module ApplicationHelper
def busted_css
@busted_css ||= begin
if Rails.env != "development"
File.join("/styles",
File.basename(Dir["public/styles/*main.css"].sort_by {|f| File.mtime(f)}.reverse[0])
)
else
"/styles/main.css"
end
end
end
end