繁体   English   中英

为什么Heroku上的Rails应用程序通过all.css和本地通过单个文件来提供资产

[英]Why does a rails app on heroku serve assets via all.css and locally via individual files

我是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文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM