Rails 3 自动资产部署到 Amazon CloudFront?

Posted

技术标签:

【中文标题】Rails 3 自动资产部署到 Amazon CloudFront?【英文标题】:Rails 3 automatic asset deployment to Amazon CloudFront? 【发布时间】:2012-01-11 09:00:29 【问题描述】:

Rails 3.1 中是否有可用的 gem 或方法可以自动将资产上传到亚马逊云前端并使用这些资产而不是提供本地托管的资产?我想手动上传编译后的资产很容易,然后更改 rails 应用程序配置以使用该资产主机,但是当资产被修改时,需要再次手动上传到云端。有什么好的方法吗?

【问题讨论】:

【参考方案1】:

一定要在 github 上查看 asset_sync。或者我们在 Using a CDN asset Host with Rails 3.1 on Heroku 上的 Heroku 开发中心文章。

使用 asset_sync 与 CDN 自定义源相比有相当大的性能改进,让您的应用程序在生产中懒惰地编译资产或直接从您的应用程序服务器上提供预编译的资产。不过我会这么说。我写的。

使用 assets_sync 和 S3,您可以预编译资产,这意味着所有资产都可以立即在资产主机/CDN 上提供服务 您只能在预编译时要求 application.rb 中的 :assets 包,从而在生产中节省内存 您的应用服务器永远不会因资产请求而受到攻击。你可以花费昂贵的计算时间,你知道的。计算。 最佳实践 HTTP 缓存标头均默认设置 您可以通过一个额外的配置启用自动 gzip 压缩

【讨论】:

您知道默认情况下不设置 HTTP 缓存标头的原因吗?现在是否必须在asset_sync 配置文件中手动设置它们?像 config.custom_headers = 'Cache-Control' => 'max-age=315576000', 'Expires' => 1.year.from_now.httpdate 我似乎无法让我设置任何东西......任何帮助表示赞赏【参考方案2】:

如果您使用 Cloudfronts 的“自定义来源”选项,您不需要上传任何内容,Cloudfront 会在需要时从您的服务器获取资产。有关设置的详细信息,请参阅:

http://blog.ertesvag.no/post/10720082458

【讨论】:

...对于那些使用弹性 beanstalk 的人,鉴于您的资产可能默认预编译,nginx 服务器会将它们提供给云端,因此这种方法应该不会产生什么后果(请求永远不会命中 rails 应用程序)。【参考方案3】:

看看https://github.com/rumblelabs/asset_sync - 我们只在 S3 上使用它,但我想一旦资产在 S3 上,CloudFront 部分就很容易了。

它最终成为您只需添加以在部署过程中执行的 rake 任务。

【讨论】:

【参考方案4】:

另一个选项是https://github.com/moocode/asset_id,自述文件有一个将它与 cloudfront 一起使用的示例。 它应该适用于 rails 3.1,但我只在 3.0.x 上使用过。

Ss John 说,所有解决方案最终都将成为一个 rake 任务 + 一些逻辑来改变 rails 中的资产路径。

【讨论】:

以上是关于Rails 3 自动资产部署到 Amazon CloudFront?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 5.2 和 webpacker 3.4.3:部署到 Heroku 时资产未编译

加速资产:使用 Rails 3.1/3.2 Capistrano 部署预编译

Rails Ubuntu / passenger / capistrano应用程序资产未部署

Amazon ElasticBeanstalk 上的 Ruby on Rails 部署:签名过期错误

将带有 Sinatra 2.0.0beta2 的 Rails 5 应用程序部署到 Amazon Linux AMI 时出错

Rails 4 - 在生产服务器上预编译资产后没有 manifest.json