Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 S3铲斗类型_Ruby On Rails 3_Amazon S3 - Fatal编程技术网

Ruby on rails 3 S3铲斗类型

Ruby on rails 3 S3铲斗类型,ruby-on-rails-3,amazon-s3,Ruby On Rails 3,Amazon S3,只是想知道是否有一种推荐的策略可以将不同类型的资产/文件存储在单独的S3存储桶中,还是将它们全部放在一个存储桶中?我拥有的不同类型的资产包括:静态站点图像、用户配置文件图像、用户生成的内容,如文档、文件和视频。关于如何将文件分组到存储桶中。这并不是一个很关键的问题,除非你想在内容上有不同的域名或不同类型的域名,在这种情况下,你需要为你想使用的每个域名单独设置一个bucket 我倾向于按功能对它们进行分组。您完全可以控制的应用程序中使用的静态文件可能会部署到一个单独的bucket中,而不是用户生成

只是想知道是否有一种推荐的策略可以将不同类型的资产/文件存储在单独的S3存储桶中,还是将它们全部放在一个存储桶中?我拥有的不同类型的资产包括:静态站点图像、用户配置文件图像、用户生成的内容,如文档、文件和视频。

关于如何将文件分组到存储桶中。这并不是一个很关键的问题,除非你想在内容上有不同的域名或不同类型的域名,在这种情况下,你需要为你想使用的每个域名单独设置一个bucket

我倾向于按功能对它们进行分组。您完全可以控制的应用程序中使用的静态文件可能会部署到一个单独的bucket中,而不是用户生成的内容。或者,您可能希望将视频放在与图像不同的存储桶中,等等

添加到我之前关于S3元数据的评论中。这将是优化如何从S3/Cloudfront服务器上传内容的关键部分

基本上,S3元数据由键值对组成。因此,您可以将
Content-Type
作为值为
image/jpeg
的键,例如,如果文件为.jpg。这将自动向S3URL或通过Cloudfront发送与您的请求值对应的适当内容类型头。缓存控制元标记也是如此。您还可以使用自己的自定义元标记。例如,我使用名为
x-amz-meta-md5
的自定义元标记来存储文件的md5哈希。它用于与版本控制系统中存储的内容进行简单的bucket比较,因此我们不必动态地对bucket中的每个文件进行校验和。我们使用它将差异内容更新推送到bucket(即,仅推送已更改的内容)

至于如何进行修订控制。我强烈建议使用版本化的文件名。换句话说,假设您有bigimage.jpg,并且希望进行更新,将其命名为bigimage1.jpg,并更改代码以反映这一点。为什么?因为最佳情况下,您希望在缓存控制头中设置较长的过期时间帧。不幸的是,如果您想部署一个同名的文件,并且您正在使用Cloudfront,那么使边缘缓存位置无效就成了问题。然而,如果您有一个新的文件名,Cloudfront将只开始填充边缘节点,您根本不必担心缓存失效

类似地,对于用户生成的内容,您可能希望包含md5或其他(大部分)唯一标识符方案,以便每个视频/图像都可以有自己的唯一文件名并放置在缓存中

这里有一个链接,指向AWs关于在Cloudfront中设置流媒体的文档,供您参考


您是直接提供S3 URL,还是使用CloudFront作为CDN,从存储桶中提取原始数据?此外,您如何将文件放入S3并设置元数据?我还没有决定从何处提供URL,但我倾向于CloudFront。该网站位于Heroku,用户可以通过带有回形针的表单添加视频。元数据将存储在Postgres中。我的意思是您如何设置S3元数据,如
内容类型的键值对
缓存控制
,等等。这些元数据将作为头发送给请求客户端?我还不确定,我刚刚开始学习视频。此信息如何影响我是否创建不同的桶类型?如果你能解释S3元数据,我将不胜感激。