关于ruby on rails:在应用程序和源代码管理中存储SASS生成的CSS的最佳方法是什么?

关于ruby on rails:在应用程序和源代码管理中存储SASS生成的CSS的最佳方法是什么?

What is the best method for storing SASS generated CSS in your application and source control?

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

许多人不喜欢将生成的代码或已编译的代码存储在版本控制中,这也足以说明public /目录不应包含您不发送给浏览器的元素。

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


罗盘框架建议将sass样式表放在app / stylesheets下,并将已编译的CSS放在public / stylesheets / compiled中。

您可以通过将以下代码添加到environment.rb中来进行配置:

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

如果使用罗盘框架,则在安装时会为您设置此配置。


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

1
/public/stylesheets/*.css


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

另一个优点(尽管很小)是,如果您不使用页面缓存,则rails进程不需要具有对public_html目录的写权限。因此,利用服务器进行恶意攻击的途径少了。


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

1
2
3
4
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不再需要此功能。


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

如果我必须结合使用SASS和基于CSS的资产,则要复杂一些。解决此问题的最简单方法是在样式表目录中包含生成的CSS的输出子目录,然后在.gitignore中排除该子目录。然后,在视图中,由于必须选择public / stylesheets / foo样式表或public / stylesheets / sass-out / foo样式表,因此必须知道正在使用的样式类型(SASS或CSS)。

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


推荐阅读