如果您在Rails应用程序中使用HAML和SASS,那么您在public / stylesheet / * .ssss中定义的任何模板都将编译为* .css样式表。从您的代码中,您可以使用stylesheet_link_tag按名称提取资产,而无需担心扩展名。
许多人不喜欢在版本控制中存储生成的代码或编译的代码,并且还有理由说public / directory不应包含您不发送给浏览器的元素。
在Rails项目中布置SASS资源时要遵循的最佳模式是什么?
答案 0 :(得分:13)
compass框架建议将您的sass样式表放在app / stylesheets下,将编译好的css放在public / stylesheets / compile中。
您可以通过将以下代码添加到environment.rb来配置:.bb:
Sass::Plugin.options[:template_location] = {
"#{RAILS_ROOT}/app/stylesheets" => "#{RAILS_ROOT}/public/stylesheets/compiled"
}
如果您使用指南针框架,它会在您安装时为您设置此配置。
答案 1 :(得分:11)
我总是在“public / stylesheets / sass / * .sass”中对所有样式表进行版本化,并为已编译的样式设置排除过滤器:
/public/stylesheets/*.css
答案 2 :(得分:6)
老实说,我喜欢在版本控制中编译已编译的SASS样式表。它们很小,只有在.sass文件发生变化时才会更改,并且将它们与应用程序的其余部分一起部署意味着SASS编译器不需要在生产中激活。
另一个优点(尽管很小)是如果您不使用页面缓存,则rails进程不需要对public_html
目录具有写访问权限。因此,利用服务器的方式可能会少一些。
答案 3 :(得分: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不再需要这样做。
答案 4 :(得分:0)
如果我可以管理它,我喜欢在为项目选择HAML / SASS时将所有样式存储在SASS模板中,并且我将删除application.css和scaffold.css。然后我将把SASS放在public / stylesheets / sass中,并将/public/stylesheets/*.css添加到.gitignore。
如果我必须使用基于SASS和CSS的资产组合,那就有点复杂了。处理此问题的最简单方法是在stylesheets目录中为生成的CSS创建一个输出子目录,然后在.gitignore中排除该子目录。然后,在您的视图中,您必须知道您正在使用哪种样式类型(SASS或CSS),因为必须选择public / stylesheets / foo样式表或public / stylesheets / sass-out / foo样式表。
如果你必须走第二条路线,建立一个帮助来抽象出sass-out子目录。