为什么heroku上的rails应用程序通过all.css和本地通过单个文件提供资源

时间:2009-11-22 07:17:43

标签: ruby-on-rails css heroku haml

我是铁杆新手,我一直在试图弄清楚heroku上的stylesheets_link_tag是怎么回事。

如果我使用

= stylesheet_link_tag "style", :cache => true

heroku使用“all.css”并且不会选择样式表,但如果我使用

= stylesheet_link_tag "style", :cache => false

它使用名称“style.css”为样式表提供服务。为什么呢?

3 个答案:

答案 0 :(得分:17)

这是调用的结果:cache =>在样式表链接标记上为true。

:cache => true获取所有提供的样式表,并将它们连接到一个名为all.css的文件中。

你在Heroku部署中只看到这个的原因是因为只有当Rails应用程序在生产模式下运行时它才会调用连接的all.css。

例如,假设我有三个样式表,并将它们包含在我的标题中:

= stylesheet_link_tag "application", "jquery-ui", "style", :cache => true

在开发中,这将包括application.css,jquery-ui.css和style.css(按此顺序)。

在制作中,它会将三个文件中的所有CSS(按照提供的顺序)连接到一个名为“all.css”的文件中,这个文件将是唯一包含的CSS文件。

这样做的好处是可以减少生产中的HTTP请求,理想情况下,包含CSS的文件大小更小,这有望加快页面加载速度。

编辑正如Casper在评论中指出的那样,Heroku有一个只读文件系统。 您可能希望查看Heroku Asset Packager以获取特定于Heroku的解决方案。

答案 1 :(得分:1)

经过测试,它对我不起作用(将config.serve_static_assets = true添加到production.rb)

答案 2 :(得分:0)

设置:cache => true会导致我的请求彻底失败。

我的短期解决方案是将以下内容添加到我的config / environments / prodcution.rb

config.serve_static_assets = true

我对Cloudflare背后的表现稍微不那么担心。找到一种方法来连接我的css和js文件是我的待办事项列表。