Rails MD5在生产上不匹配

时间:2015-01-21 23:37:43

标签: ruby-on-rails asset-pipeline

我正在制作Rails 3.2应用程序。最近(不幸的是,我不确切地知道什么时候)有人向我指出一些图像被破坏了:服务器正在为他们返回404。我确认在标记中和CSS文件中引用的某些图像都是这种情况。

如果我尝试单独加载图片,比如https://www.navigatingcancer.com/assets/screenshots/discussions_groups-8d04988b189bf9093348b8246ad5f4b7.png,那就是404s。但是,如果我删除了MD5指纹,则会加载图像。

当我进入生产并运行

helper.asset_path('screenshots/discussions_groups.png')

我得到了

/assets/screenshots/discussions_groups-3c30cbd76d94e13f6c6c6a1712cbedc5.png

请注意,此指纹与上述标记引用的指纹不同。事实上,如果我将它放在URL中, URL和指纹加载就会出现。

似乎Rails在代码中为此图像提供过时的MD5指纹。

请注意,图像是受其影响的唯一资产,而不是样式表或JS文件。此外,图像没有改变。

我尝试过什么

  • 我在浏览器上清除了缓存。
  • 我查看了我们的暂存环境。虽然指纹不同,但图像加载正确。
  • 我们使用的是turbo_sprockets宝石,我认为它可能与它有关,但我把它从Gemfile中取出并重新部署。哈希必须重新生成,因为这次不同的图像被打破了。
  • 我读了this thread on rails/rails。显然,哈希在不同的环境中会有所不同,因此这就解释了为什么它们在分期时没有被打破。但不是为什么他们在生产上被打破了。
  • 我再次进入生产并运行find . -name discussions_groups*,它找到了上面asset_path中引用的那个(即带有效散列的那个),但没有标记中引用的那个
  • 在此SSH会话期间,grepdiscussions_groups编辑,public/assets/manifest.yml中引用的版本是具有有效哈希的版本。

注意:我认识到这可能与我的生产环境有关,但我希望我的错误足够通用,以便答案可以对其他人有所帮助。

0 个答案:

没有答案