有关带有/ image上传的Rails应用程序的亚马逊Cloudfront的问题

时间:2011-09-13 18:21:33

标签: ruby-on-rails ruby-on-rails-3 amazon-s3 carrierwave amazon-cloudfront

Newbish AWS问题:我们的Rails应用目前允许通过 Carrierwave 将图片上传到 S3 存储桶。事情很好......但它开始变得有些混乱(而且很麻烦),因为一些原始文件在一个桶中(上传的照片),而其他人在另一个桶(站点标识等),而其他人(javascript& css) )直接从Rails主机提供。

我们正在寻找云前端可能帮助整合&简化我们的交付......但我们都没有任何先前的经验。 一旦正确配置(使用自定义源)可以/我们应该将所有资产带回我们的本地服务器然后“简单地”依赖Cloud Front进行交付吗?这将意味着带来所有上传的图像(目前在S3上)返回到本地Rails服务器,而不是使用带有Fog gem的Carrierwave上传它们,我们只需处理&将文件存储在本地文件系统上。这将有许多优点,其中最主要的是我们在我们的主机上本地拥有整个应用程序的完整副本,包括所有资产。

此外,我们是否可以预期新图片上传后会出现延迟... 超出目前处理上传图片后因处理上传图片而略有延迟的情况通过雾?

最后,是否有任何理由让我们的S3存储桶保持活动状态?我理解“未使用的”资产是从CloudFront中清除的,但无论如何,我还不清楚什么度量标准定义“未使用”。

这是一个常见的用例吗?主要是寻找验证或者告诉你。

谢谢!

3 个答案:

答案 0 :(得分:1)

就使用cloudfront的carrierwave s3而言,我写了一篇关于如何做到这一点的博客文章。 (如果你已经有s3工作,那么让云端部分工作非常容易)http://jeffdickey.info/using-carrierwave-on-heroku-for-image-uploading-w-cloudfront

在js / css资产说明中,如果您使用的是rails 3.1资产管道,那么您需要做的就是进入您的production.rb文件并将资产主机设置为指向rails服务器的cloudfront cdn

我喜欢使用content.domain.com和assets.domain.com这两个cdns。

无需将您的js / css资产上传到S3,然后从CloudFront提供服务,只需直接提供。 CloudFront将为您处理缓存。

答案 1 :(得分:0)

两个建议:

1)使用jammitjammit-s3管理您的资产并将其投放到Cloudfront。在开发过程中,您的资产位于本地文件系统上,但在部署时,您将推送到Cloudfront。 s3 gem很聪明,可以检查哪些文件已经更改等等。我不确定它会如何受到rails 3.1的影响,但它在3.0上对我有用。

2)使用cloudflare。这项服务令人难以置信地令人兴奋,除了安全优势之外,还可以缓存静态资产并使用自己的cdn提供这些资产。令人惊讶的是,有一项免费服务可以满足大多数人的需求,尽管我不了解你的应用程序的要求。强烈建议您查看。

答案 2 :(得分:0)

关于将上传的图像带回服务器,需要注意以下几点:

  • 您可能需要支付多个云端边缘位置(目前约有20个),而不是在一个存储桶中支付存储费用。另一方面,您只需支付实际使用的文件和用户所在的位置,因此差异取决于文件的使用方式。
  • 如果文件被更改,您需要更改其名称,否则您的用户可能看不到更改,也许您已经通过提供上传的唯一名称来解决此问题。

服务没有明显延迟,如果文件从egde位置丢失,Cloudfront将简单地从您的服务器获取文件,转发并存储它以供下次访问时使用。因此,如果文件被清除,那么因为Cloudfront将在需要时再次获取文件并不重要。

至于你的其他文件,因为你正在使用Rails 3.1和资产管道,这很容易。我在这里记录了我的设置:

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