3

我有一个没有使用资产管道的 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"}

所以我想出了一些我认为可行的想法。

  1. 符号链接main.css->f43ce6bf.main.css
  2. 添加视图助手以查找资产
  3. 将 javascript 和 css 内联到视图中,因为它不是太大
  4. 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
4

0 回答 0