21

如果您在 Rails 应用程序中使用 HAML 和 SASS,那么您在 public/stylesheet/*.sass 中定义的任何模板都将编译为 *.css 样式表。从您的代码中,您可以使用 stylesheet_link_tag 按名称提取资产,而无需担心扩展。

许多人不喜欢将生成的代码或编译的代码存储在版本控制中,而且 public/ 目录不应该包含您不发送到浏览器的元素也是有道理的。

在 Rails 项目中布置 SASS 资源时,最好遵循的模式是什么?

4

5 回答 5

13

compass框架建议将您的sass 样式表放在 app/stylesheets 下,将编译后的 css 放在 public/stylesheets/compiled 中。

您可以通过将以下代码添加到您的 environment.rb 来配置它:

Sass::Plugin.options[:template_location] = {
  "#{RAILS_ROOT}/app/stylesheets" => "#{RAILS_ROOT}/public/stylesheets/compiled"
}

如果您使用 compass 框架,它会在您安装它时为您设置此配置。

于 2008-11-27T04:49:01.920 回答
11

我总是在“public/stylesheets/sass/*.sass”中对所有样式表进行版本控制,并为已编译的样式设置一个排除过滤器:

/public/stylesheets/*.css
于 2008-09-17T19:02:45.477 回答
6

老实说,我喜欢在版本控制中使用我编译的 SASS 样式表。它们很小,只有在您的 .sass 文件更改时才会更改,并且让它们与您的应用程序的其余部分一起部署意味着 SASS 编译器永远不需要在生产中触发。

另一个优点(尽管很小)是,如果您不使用页面缓存,则您的 rails 进程不需要对您的public_html目录具有写访问权限。因此,对您的服务器的利用可能是邪恶的。

于 2008-09-19T01:50:16.800 回答
5

有点相关,但在 capistrano 部署期间重新生成 CSS 是个好主意。这个回调钩子就是这样做的:

after "deploy:update_code" do
  rails_env = fetch(:rails_env, "production")
  run "#{release_path}/script/runner -e #{rails_env} 'Sass::Plugin.update_stylesheets'"
end

更新:现代版本的 Haml/Sass 不再需要这样做。

于 2008-09-19T22:13:08.910 回答
0

如果我可以管理它,当我为项目选择 HAML/SASS 时,我喜欢将我的所有样式存储在 SASS 模板中,并且我将删除 application.css 和 scaffold.css。然后我将SASS放在public/stylesheets/sass中,并将/public/stylesheets/*.css添加到.gitignore中。

如果我必须结合使用 SASS 和基于 CSS 的资产,那就有点复杂了。处理此问题的最简单方法是在样式表目录中生成生成的 CSS 的输出子目录,然后在 .gitignore 中排除该子目录。然后,在您的视图中,您必须知道您正在使用哪种样式类型(SASS 或 CSS),因为您必须选择 public/stylesheets/foo 样式表或 public/stylesheets/sass-out/foo 样式表。

如果您必须走第二条路线,请构建一个帮助器来抽象出 sass-out 子目录。

于 2008-09-17T18:22:06.947 回答