我是一个 Rails 新手,我一直在试图弄清楚 heroku 上的 stylesheets_link_tag 发生了什么。
如果我使用
= stylesheet_link_tag "style", :cache => true
heroku 使用“all.css”并且不选择样式表,但是如果我使用
= stylesheet_link_tag "style", :cache => false
它使用其名称“style.css”为样式表提供服务。为什么?
我是一个 Rails 新手,我一直在试图弄清楚 heroku 上的 stylesheets_link_tag 发生了什么。
如果我使用
= stylesheet_link_tag "style", :cache => true
heroku 使用“all.css”并且不选择样式表,但是如果我使用
= stylesheet_link_tag "style", :cache => false
它使用其名称“style.css”为样式表提供服务。为什么?
这是在样式表链接标签上调用 :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 的解决方案。
对此进行了测试,但它对我不起作用(将 config.serve_static_assets = true 添加到 production.rb)
设置 :cache => true 会导致我的请求完全失败。
我的短期解决方案是将以下内容添加到我的 config/environments/prodcution.rb
config.serve_static_assets = true
我不太担心 Cloudflare 背后的性能。寻找一种方法来连接我的 css 和 js 文件在我的待办事项列表中。