Rails 应用程序 - 使用 Cloudfront 和 Heroku 进行资产交付
Posted
技术标签:
【中文标题】Rails 应用程序 - 使用 Cloudfront 和 Heroku 进行资产交付【英文标题】:Rails Application - Using Cloudfront for asset delivery with Heroku 【发布时间】:2018-12-04 03:39:19 【问题描述】:情况
如果不指定要在 config/initializers/assets 中预编译的每个单独文件,我无法让我的供应商资产在 heroku 中预编译,因此我不得不设置
config.assets.compile = true
注意:我不需要 application.js 中的供应商资产,因为我会在需要时按页面调用它们。
无论如何,我设置了一个 Cloudfront 帐户,现在一切正常,就像它在开发中一样。但是在部署到 Heroku 时,有一个警告和一个指向 *** 帖子的链接,警告不要将 config.assets.compile 设置为 true。
Compile 在生产环境中设置为 True 如果您已启用您的应用程序 config.assets.compile = true 在生产中,您的应用程序可能 很慢。这在堆栈溢出帖子中得到了最好的描述:
当你开始编译时,会发生这样的事情:每个请求 /assets 中的文件被传递给 Sprockets。在每个请求的第一个请求中 以及它在 Rails 使用的任何东西中编译和缓存的每个资产 用于缓存(通常是文件系统)。在后续请求 Sprockets 接收请求并且必须查找指纹文件名, 检查组成的文件(图像)或文件(css和js) 资产没有被修改,然后如果有缓存版本服务 那个。
已知此设置还会导致其他运行时不稳定和 一般不推荐。相反,我们建议预编译 部署时的所有资产(这是默认设置),或者如果不是 可能在本地编译资产。
我的问题是,由于我现在使用 Cloudfront,这是否涵盖了他们警告的内容、速度等问题?
提前感谢您的任何建议:)
【问题讨论】:
【参考方案1】:是的,您可能已经被覆盖了。资产请求将首先到达 CloudFront。在第一次请求之后,它将被缓存并且不应访问您的服务器进行编译。但是,每次您的资产更改时,它们都必须重新编译,这当然非常慢。
【讨论】:
以上是关于Rails 应用程序 - 使用 Cloudfront 和 Heroku 进行资产交付的主要内容,如果未能解决你的问题,请参考以下文章