Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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

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 Cloudfront文件名_Ruby On Rails_Amazon S3_Cdn_Amazon Cloudfront - Fatal编程技术网

Ruby on rails Cloudfront文件名

Ruby on rails Cloudfront文件名,ruby-on-rails,amazon-s3,cdn,amazon-cloudfront,Ruby On Rails,Amazon S3,Cdn,Amazon Cloudfront,我正在一家初创公司的工作中学习AWS和Cloudfront(CF)。由于时间限制,大多数学习不是很系统(不深入)。有一个问题我就是找不到解决办法。我的CF发行版链接到一个S3 bucket,其中包含所有资产(CSS、JS文件等)。bucket中的文件名如下所示: 我们曾在大学里讨论过CDN,我记得他们计算文件的散列,并使用这些散列来“查找”服务器的位置(IP)(在发行版中,类似于DNS中的名称解析),该文件将为其服务。也许我误解了那部分 因此,问题是: CF提供的名称中的字母数字顺序是什么?

我正在一家初创公司的工作中学习AWS和Cloudfront(CF)。由于时间限制,大多数学习不是很系统(不深入)。有一个问题我就是找不到解决办法。我的CF发行版链接到一个S3 bucket,其中包含所有资产(CSS、JS文件等)。bucket中的文件名如下所示:

我们曾在大学里讨论过CDN,我记得他们计算文件的散列,并使用这些散列来“查找”服务器的位置(IP)(在发行版中,类似于DNS中的名称解析),该文件将为其服务。也许我误解了那部分

因此,问题是:

  • CF提供的名称中的字母数字顺序是什么?那是杂烩吗
  • 谁计算该值:CF、S3还是部署过程
  • 为什么该值有时会不同,并导致服务器上出现404个错误
另外,值得注意的是,在某些时候,部署是使用
capistrano
(是的,它是Rails)完成的,它使用
asset\u sync
gem将资产推送到S3。然而,在新产品中,我们并没有使用这个功能,只是在所有资产上使用版本控制

  • CF提供的名称中的字母数字顺序是什么?那是杂烩吗
是的。32字节哈希,可能是SHA-256

  • 谁计算该值:CF、S3还是部署过程
这些都不是。这实际上是Rails的一部分—它在文件名中添加了一个“版本”散列,这样您就可以发送将来过期的HTTP头(例如,您可以对客户端浏览器说“缓存此文件,一年内您不需要再次从服务器获取它”)

在更新资产时,如果不使用散列,就会造成地狱,因为每个用户都必须硬加载(不使用缓存)才能获得新版本。如果更改版本哈希,并在新的HTML头中链接到该哈希,则 浏览器再次获取它,因为它是一个新文件

  • 为什么该值有时会不同,并导致服务器上出现404个错误

见上文。哈希值随您发布的资产的每个版本而变化;如果有人试图获取旧资产或S3存储桶中不再存在哈希的资产,将导致404。

Thank you@ArtOfCode,这非常有用。