【发布时间】:2011-12-04 03:33:55
【问题描述】:
在 Rails 3.1 应用程序中,一个控制器需要使用一组自定义变量让其所有视图编译他们每次请求可能需要的任何 Sass 样式表。理想情况下,编译必须通过资产管道进行,以便生成基于内容的资产名称(包括内容的 MD5 散列的名称)。对于解决方案而言,使用纯 Sass 功能而不是诉诸于例如 Sass 样式表的 ERB 处理,这一点很重要。
根据我在这里和其他地方所做的研究,以下似乎是一种可能的方法:
-
设置变量访问
使用自定义 Sass 函数创建某种类型的变量访问器桥,例如,如 Konstantin Haase here (gist) 所述。这似乎很容易做到。
通过 Sass 部分配置所有变量访问,例如,在
_base.sass中,这是 Compass 方式。部分可以使用上面定义的自定义函数。也很简单。
-
捕获所有资产引用
装饰视图对象的
asset_path方法。我的这个很好用。使用
Sprockets::Environment的自定义子类解析引用。这也很好用。
-
强制资产重新编译,无论文件修改时间如何
我还没有找到一个好的解决方案。
我已经看到通过实例化新的
Sass::Engine并传递将在Sass::Script::Functions::EvaluationContext中可用的自定义数据来手动启动 Sass 处理的示例。这种方法的问题是我必须自己管理文件命名和路径,而且我总是冒着可能偏离 Sprockets 所做的事情的风险。我找不到任何基于每个请求强制 Sprocket 处理的示例,无论文件修改时间如何,这也允许自定义变量传递。
我很感激 cmets 关于一般方法以及如何最好地处理 (3) 的任何具体指针/建议。
【问题讨论】:
标签: ruby-on-rails-3 ruby-on-rails-3.1 sass asset-pipeline sprockets