13

我是一个 Rails 新手,我一直在试图弄清楚 heroku 上的 stylesheets_link_tag 发生了什么。

如果我使用

= stylesheet_link_tag "style", :cache => true

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

= stylesheet_link_tag "style", :cache => false

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

4

3 回答 3

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 的解决方案。

于 2009-11-22T07:49:49.157 回答
1

对此进行了测试,但它对我不起作用(将 config.serve_static_assets = true 添加到 production.rb)

于 2011-09-12T22:01:04.980 回答
0

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

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

config.serve_static_assets = true

我不太担心 Cloudflare 背后的性能。寻找一种方法来连接我的 css 和 js 文件在我的待办事项列表中。

于 2011-08-01T00:02:57.030 回答