【问题标题】:Automatically upload assets to S3 without assets_sync无需 assets_sync 自动将资产上传到 S3
【发布时间】:2015-12-01 20:42:12
【问题描述】:

我刚刚对 Heroku 进行了第一次部署,除了我的图像之外,资产还可以工作。当我发现这个要点时,我正在阅读有关如何将资产移动到 s3(然后用云端缓存它们)的信息:

https://gist.github.com/schneems/9374188 “我讨厌asset_sync”

使用资产同步可能会导致失败、难以调试、不需要,并且会增加额外的复杂性。不要使用它。而是使用https://devcenter.heroku.com/articles/using-amazon-cloudfront-cdn

问题是,我找不到如何像 gem 那样自动同步资产。使用asset_sync gem 的最佳替代方法是什么?

【问题讨论】:

  • 使用cloudfront有什么不明白的地方?
  • 如何在没有asset_sync的情况下将资产自动同步到s3?
  • 你找到办法了吗?我也有同样的问题...
  • @FrederickCheung 如果您能提供一些启发,那就太棒了,显然我和一些人对此有同样的问题

标签: ruby-on-rails ruby heroku amazon-s3


【解决方案1】:

虽然是一个老问题,但万一有人发现这个问题并希望在这里得到答案,这是我自己的发现。

一段时间以来,Cloudfront 允许用户在其配置中设置 origin 值。您想将其设置为您的应用程序主机。如果您要部署到可通过https://myapp.com 访问的站点,那么您将使用它作为您的Cloudfront origin。然后来自 Cloudfront 的任何缓存未命中将路由到您的应用程序层 https://myapp.com,并附加请求中存在的任何路径信息(例如 /assets/css/whatever.css。这意味着您的应用程序必须能够提供这些静态资产。如果可以,那么一切就绪。如果没有,请查看 Rails 指南了解如何启用它。

警告!您不能origin 使用不可公开访问的 URL。那是什么意思?例如,如果您正在预置隐藏在 VPC 后面的自己的预生产应用程序实例,那么您不能将这些实例用于您的 origin。无法授予 Cloudfront 对您的实例的特殊访问权限。如果您阅读 Cloudfront 在 serving private content 上的文档,则有一个解决方法;基本上,您使任何具有适当链接的人都可以公开访问您的应用程序,但您强制应用程序级别的限制以禁止任何不使用特殊签名的 URL 或 cookie 的人访问。

【讨论】:

    【解决方案2】:

    这已经很老了,但这里的答案并不令人满意。链接的要点和文章并不打算说asset_sync gem 不好。这篇文章的意思是说你不应该从任何地方(S3 或不)提供你的资产,但你的应用程序。无论您是否使用这个特定的 gem,在任何地方上传您的资产都会遇到要点中提到的相同问题。

    建议从您的应用程序中提供资产,然后使用 Cloudfront 等 CDN 来减轻服务器上的负载。您无需将任何内容上传到 Cloudfront。相反,Cloudfront 会按需向您的应用程序询问资产并自动缓存。

    但是,Cloudfront(或任何 CDN)并未解决asset_sync 的所有用例。如果您遇到 slug 大小问题并且您已经清理了 repos 和不必要的依赖项,您可能仍需要使用asset_sync 将您的 slug 降低到 500MB 并让 Heroku 满意。当然,您可以放弃 assets_sync 并使用自定义实现上传到 S3(或其他任何地方)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多